大熊猫|传播所有日期的值

时间:2017-02-21 14:01:37

标签: pandas

我有这种格式的数据:

key1 key2 from_date to_date value

我想将其转换为以下格式:

key1 key2 date value

其中date列应包含from_date和to_date之间所有日期的相同“值”。

在熊猫中这样做的最佳方式是什么?

1 个答案:

答案 0 :(得分:0)

您可以使用:

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