2017-02-21 1 views
0

ich Daten in diesem Format haben:Pandas | propagieren Werte für alle Termine

key1 key2 from_date to_date value 

Ich möchte dies in dieses Format konvertieren:

key1 key2 date value 

wo die Datumsspalte den gleichen ‚Wert‘ für alle enthalten sollte Datum zwischen from_date und to_date.

Was ist der beste Weg, dies in Pandas zu tun?

Antwort

0

können Sie verwenden:

print (df) 
    key1 key2 from_date to_date value 
0 a g 2017-01-01 2017-01-05 100 
1 r h 2017-02-01 2017-02-03  50 

print (df.dtypes) 
key1     object 
key2     object 
from_date datetime64[ns] 
to_date  datetime64[ns] 
value     int64 
dtype: object 
df1 = pd.concat([pd.Series(r.Index, 
          pd.date_range(r.from_date, r.to_date)) 
          for r in df.itertuples()]).reset_index() 
df1.columns = ['date','idx'] 
print (df1) 
     date idx 
0 2017-01-01 0 
1 2017-01-02 0 
2 2017-01-03 0 
3 2017-01-04 0 
4 2017-01-05 0 
5 2017-02-01 1 
6 2017-02-02 1 
7 2017-02-03 1 

df2 = df1.set_index('idx').join(df[['key1','key2', 'value']]).reset_index(drop=True) 
df2 = df2.reindex(columns=['key1','key2','date', 'value']) 
print (df2) 
    key1 key2  date value 
0 a g 2017-01-01 100 
1 a g 2017-01-02 100 
2 a g 2017-01-03 100 
3 a g 2017-01-04 100 
4 a g 2017-01-05 100 
5 r h 2017-02-01  50 
6 r h 2017-02-02  50 
7 r h 2017-02-03  50 
Verwandte Themen