移动窗口的熊猫在行

时间:2016-02-04 15:02:54

标签: python pandas

有没有办法在以当前行为中心的移动窗口上应用函数?,例如:

>>> df = pd.DataFrame({'A': {0: 'a', 1: 'b', 2: 'c'},
...                    'B': {0: 1, 1: 3, 2: 5},
...                    'C': {0: 2, 1: 4, 2: 6}})
>>> df
   C
0  2
1  4
2  6

所需结果会生成一列D,它是前一行,当前行和后续行的列C的平均值,即:

row 0 => D = (2 + 4)/2     = 3
row 1 => D = (2 + 4 + 6)/3 = 4
row 2 => D = (4 + 6)/2     = 5 

>>> df_final
   C  D
0  2  3
1  4  4
2  6  5

2 个答案:

答案 0 :(得分:1)

看起来你只想要一个rolling mean,其中心窗口为3.例如:

>>> df["D"] = pd.rolling_mean(df["C"], window=3, center=True, min_periods=2)
>>> df
   A  B  C  D
0  a  1  2  3
1  b  3  4  4
2  c  5  6  5

答案 1 :(得分:0)

更新后的答案:pd.rolling_mean was deprecated in 0.18,从pandas = 0.23.4开始不再可用。

  

窗口函数现在是方法

     

已将窗口函数重构为Series/DataFrame对象上的方法,而不是现已弃用的顶级函数。这允许这些窗口类型的函数具有与.groupby相似的API。

它要么需要在dataframe上调用:

In [55]: df['D'] = df['C'].rolling(window=3, center=True, min_periods=2).mean()

In [56]: df
Out[56]:
   A  B  C    D
0  a  1  2  3.0
1  b  3  4  4.0
2  c  5  6  5.0

或者来自pandas.core.window.Rolling

In [57]: df['D'] = pd.core.window.Rolling(df['C'], window=3, center=True, min_periods=2).mean()

In [58]: df
Out[58]:
   A  B  C    D
0  a  1  2  3.0
1  b  3  4  4.0
2  c  5  6  5.0