如何应用DataFrame.rolling
函数并将值分配回原始DataFrame?
,例如,
i = pd.MultiIndex.from_product([['A','B','C'], np.arange(1, 11, 1)], names=['Name','Num'])
df = pd.DataFrame(np.random.randn(30), i, columns=['Vals'])
window = df.groupby(['Name']).rolling(3, min_periods=3)
df['Window'] = window['Vals'].apply(lambda x: x[1] + x[2])
在这种情况下,我希望滚动lambda重置为每个Name
值,因此对于每个Window
的前3行,NaN
将为Name
。但是,最后分配到DataFrame的新列会生成完全 NaN
示例窗口lambda基本上可以正常工作,但我注意到它将分组值添加到MultiIndex。请注意,下面有两个级别称为Name
:
window['Vals'].apply(lambda x: x[1] + x[2]) # Returns:
Name Name Num
A A 1 NaN
2 NaN
3 -2.408704
4 -3.184169
5 0.207093
6 1.649017
7 0.789064
8 0.706335
9 -0.487192
10 -1.625869
B B 1 NaN
2 NaN
3 0.023201
4 -0.044582
5 0.409526
我是否错误地使用了这些方法,或者未能采取必要措施让window.apply()
与DataFrame保持一致?