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:-)编码快乐