Pandas 多指标不规则时间序列数据(按月数)
我有下面的数据框Pandas 多指标不规则时间序列数据(按月数),pandas,time-series,multi-index,Pandas,Time Series,Multi Index,我有下面的数据框 df=pd.DataFrame(数据={ 'item':['red'、'red'、'red'、'blue'、'blue'], ‘dt’:pd.截止日期时间(‘2018-01-31’、‘2018-02-28’、‘2018-03-31’、‘2018-01-31’、‘2018-03-31’), 's':[3.2,4.8,5.1,5.3,5.8], 'r':[1,2,3,4,5], ‘t’:[7,8,9,10,11], }) 看起来像 item dt
df=pd.DataFrame(数据={
'item':['red'、'red'、'red'、'blue'、'blue'],
‘dt’:pd.截止日期时间(‘2018-01-31’、‘2018-02-28’、‘2018-03-31’、‘2018-01-31’、‘2018-03-31’),
's':[3.2,4.8,5.1,5.3,5.8],
'r':[1,2,3,4,5],
‘t’:[7,8,9,10,11],
})
看起来像
item dt s r t
0 red 2018-01-31 3.2 1 7
1 red 2018-02-28 4.8 2 8
2 red 2018-03-31 5.1 3 9
3 blue 2018-01-31 5.3 4 10
4 blue 2018-03-31 5.8 5 11
请注意,时间点是不规则的:“蓝色”缺少2月份的数据。所有日期都是有效的月末日期
我想添加一个列,它是“两个月前的s值”,理想情况下类似于
df['s_lag2m'] = df.set_index(['item','dt'])['s'].shift(2, 'M')
我会得到
item dt s r t s_lag2m
0 red 2018-01-31 3.2 1 7 NaN
1 red 2018-02-28 4.8 2 8 NaN
2 red 2018-03-31 5.1 3 9 3.2
3 blue 2018-01-31 5.3 4 10 NaN
4 blue 2018-03-31 5.8 5 11 5.3
但这不起作用;它抛出未实现错误:类型多索引不支持
我该怎么做呢?我们可以在设置索引后只使用dt进行重新索引
df['New']=df.set_index(['dt']).groupby('item')['s'].shift(2, 'M').\
reindex(pd.MultiIndex.from_frame(df[['item','dt']])).values
df
item dt s r t New
0 red 2018-01-31 3.2 1 7 NaN
1 red 2018-02-28 4.8 2 8 NaN
2 red 2018-03-31 5.1 3 9 3.2
3 blue 2018-01-31 5.3 4 10 NaN
4 blue 2018-03-31 5.8 5 11 5.3
哇!太壮观了。而且,和熊猫一样,完全没有直觉。谢谢。@Jonathan yw:-)编码快乐