带有MultiIndex的Pandas DataFrame.rolling窗口

时间:2017-12-20 19:14:27

标签: python pandas dataframe multi-index pandas-groupby

如何应用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保持一致?

0 个答案:

没有答案