【问题标题】:Rolling mean with customized window with Pandas使用 Pandas 定制窗口的滚动平均值
【发布时间】:2019-01-03 07:57:08
【问题描述】:

有没有办法自定义rolling_mean函数的窗口?

data
1
2
3
4
5
6
7
8

假设窗口设置为 2,即计算包括观察在内的观察前后 2 个数据点的平均值。说第三个观察。在这种情况下,我们将拥有(1+2+3+4+5)/5 = 3。以此类推。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    使用前向(或后向)窗口计算通常的滚动平均值,然后使用shift 方法将其重新居中。

    data_mean = pd.rolling_mean(data, window=5).shift(-2)
    

    如果您想在观察前后平均超过 2 个数据点(总共 5 个数据点),请使用 window=5

    例如,

    import pandas as pd
    
    data = pd.Series(range(1, 9))
    
    data_mean = pd.rolling_mean(data, window=5).shift(-2)
    print(data_mean)
    

    产量

    0   NaN
    1   NaN
    2     3
    3     4
    4     5
    5     6
    6   NaN
    7   NaN
    dtype: float64
    

    作为kadee points out,如果您希望将滚动平均值居中,请使用

    pd.rolling_mean(data, window=5, center=True)
    

    【讨论】:

    • 感谢您的回答。我可能无法很好地说明我的例子。让我更新一下我的例子。
    • 要重新居中,也可以这样做:data_mean = pd.rolling_mean(data, window=5, center=True)
    • @kadee:感谢您的改进。
    【解决方案2】:

    对于更多最新版本的 Pandas(请参阅 0.23.4 文档https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.rolling.html),您不再有 rolling_mean。相反,您将使用

    DataFrame.rolling(window, min_periods=None, center=False, win_type=None, on=None, axis=0, closed=None)
    

    对于您的示例,它将是:

    df.rolling(5,center=True).mean()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-11
      • 2018-05-23
      • 2019-09-09
      • 2020-07-04
      • 1970-01-01
      • 2020-07-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多