我有什么:
Sym Date close
A 1-Jan 45
A 2-Jan 15
A 3-Jan 55
B 1-Jan 41
B 2-Jan 87
B 3-Jan 82
C 1-Jan 33
C 2-Jan 15
C 3-Jan 46
我需要什么
Sym Date close rolling_max_2day
A 1-Jan 45 NaN
A 2-Jan 15 45
A 3-Jan 55 55
B 1-Jan 41 NaN
B 2-Jan 87 87
B 3-Jan 82 87
C 1-Jan 33 NaN
C 2-Jan 15 33
C 3-Jan 46 46
数据框df
具有多个索引(Sym,Date)
我试过这样的话:
df['rolling_max_2day'] = df.groupby(level=['sym']).apply(lambda x:pd.rolling_max(x['close'].values,2))
它不会返回任何错误,但它也会返回列rolling_max_2day
但是,如果只是这段代码,而不是附加到df
,我可以获得正确的系列。
df.groupby(level=['sym']).apply(lambda x:pd.rolling_max(x['close'].values,2))
谢谢!
答案 0 :(得分:1)
您可以使用df.groupby('Sym')['close']
代替
pd.rolling_max(x, 2)
上申请
In [124]: df['rolling_max_2day'] = (df.groupby('Sym')['close']
.apply(lambda x:pd.rolling_max(x, 2)))
In [125]: df
Out[125]:
Sym Date close rolling_max_2day
0 A 1-Jan 45 NaN
1 A 2-Jan 15 45
2 A 3-Jan 55 55
3 B 1-Jan 41 NaN
4 B 2-Jan 87 87
5 B 3-Jan 82 87
6 C 1-Jan 33 NaN
7 C 2-Jan 15 33
8 C 3-Jan 46 46