熊猫按滚动窗口比例分组

时间:2019-01-15 00:00:59

标签: python pandas

我需要在一个DataFrame的5年窗口中找到平均比率。 如果我这样做:

df = pd.DataFrame({'Cost': {0: 0.0,  13: 70.0,  30: 132.0,  53: 2.0,  71: 69.0,  90: 71.0,  107: 57.0,  128: 55.0,  151: 57.0},
       'YEAR': {0: 2008,  13: 2009,  30: 2010,  53: 2011,  71: 012,  90: 2013,  107: 2014,  128: 2015,  151: 2016}})

然后

df["Cost"].rolling(window=5, min_periods=5,center=True).sum() / df["Cost"].rolling(window=5, min_periods=5,center=True).sum().sum()

我可以得到它,但是如果有更多的行,我就会得到太多年。如何获得5年的平均成本比率?

返回值应该是5的数组,与我当前的代码行的总和为1.0:

[0.19017704,0.2307253 ,  0.22330097,  0.1793261 ,  0.17647059]

1 个答案:

答案 0 :(得分:2)

您可以将sum更改为mean

df["Cost"].rolling(window=5, min_periods=5,center=True).mean()

更新

使用rolling_window

s=rolling_window(df.Cost.values,5)
s/np.sum(s,1)
array([[0.        , 0.20348837, 0.39879154, 0.00787402, 0.22330097],
       [0.25641026, 0.38372093, 0.0060423 , 0.27165354, 0.22977346],
       [0.48351648, 0.00581395, 0.20845921, 0.27952756, 0.18446602],
       [0.00732601, 0.2005814 , 0.21450151, 0.22440945, 0.17799353],
       [0.25274725, 0.20639535, 0.17220544, 0.21653543, 0.18446602]])