我有一个长格式的数据框,其中两列存在重复值,而另一列包含数据。我想找到每个分组的简单移动平均线(SMA)。我的问题是:rolling()
函数无法考虑到数据按两列分组的情况。
这里是一些虚拟数据和代码:
import numpy as np
import pandas as pd
dtix=pd.Series(pd.date_range(start='1/1/2019', periods=4) )
df=pd.DataFrame({'ix1':np.repeat([0,1],4), 'ix2':pd.concat([dtix,dtix]), 'data':np.arange(0,8) })
df
当我对这些数据进行分组滚动平均时,得到的输出如下所示:
ix1 ix2 data rolling_mean 0 0 2019-01-01 NaN 1 0 2019-01-02 NaN 2 0 2019-01-03 1.0 3 0 2019-01-04 2.0 0 1 2019-01-01 NaN 1 1 2019-01-02 NaN 2 1 2019-01-03 5.0 3 1 2019-01-04 6.0
df.groupby(['ix1','ix2']).agg({'data':'mean'}).rolling(2).mean()
数据 ix1 ix2 0 2019年01月01日 NaN 2019年01月02日 0.5 2019年01月03日 1.5 2019年01月04日 2.5 1 2019年01月01日 3.5 2019年01月02日 4.5 2019年01月03日 5.5 2019年01月04日 6.5
期望输出: 然而,我实际希望得到的是这样的:
sma ix1 ix2 0 2019年01月01日 NaN 2019年01月02日 0.5 2019年01月03日 1.5 2019年01月04日 2.5 1 2019年01月01日 NaN 2019年01月02日 4.5 2019年01月03日 5.5 2019年01月04日 6.5
非常感谢您的帮助。