我有这种格式的数据:
key1 key2 from_date to_date value
我想将其转换为以下格式:
key1 key2 date value
其中date列应包含from_date和to_date之间所有日期的相同“值”。
在熊猫中这样做的最佳方式是什么?
答案 0 :(得分:0)
您可以使用:
concat
创建的date_range
Series
join
原始df
列index
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