有没有办法在以当前行为中心的移动窗口上应用函数?,例如:
>>> 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
答案 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