【问题标题】:How do I calculate a rolling mean with custom weights in pandas?如何在熊猫中使用自定义权重计算滚动平均值?
【发布时间】:2015-09-03 06:05:46
【问题描述】:

Pandas 文档http://pandas.pydata.org/pandas-docs/stable/computation.html 有一个如何计算移动平均线的示例:

ser = pd.Series(np.random.randn(10), index=pd.date_range('1/1/2000', periods=10))
pd.rolling_window(ser, 5, 'boxcar')

第二行计算一个滚动平均值,窗口为 5,五个观察值中的每一个都具有相同的权重。文档诱人地提到了使用自定义权重的可能性(“当传递一个 win_type 而不是显式指定权重时......”),但是你是怎么做的呢?

谢谢!

【问题讨论】:

    标签: python pandas moving-average


    【解决方案1】:

    我不是数学专家,但stahlous解释一下你需要什么here

    我尝试测试一下:

    import pandas as pd
    
    ser = pd.Series([1,1,1], index=pd.date_range('1/1/2000', periods=3))
    print ser
    
    rm1 = pd.rolling_window(ser, window=[2,2,2], mean=False)
    rm2 = pd.rolling_window(ser, window=[2,2,2]) #, mean=True
    
    print rm1
    #
    #2000-01-01   NaN
    #2000-01-02   NaN
    #2000-01-03     6
    #Freq: D, dtype: float64
    print rm2
    #
    #2000-01-01   NaN
    #2000-01-02   NaN
    #2000-01-03     1
    #Freq: D, dtype: float64
    

    我将 window 设置为 ndarray ([2,2,2]) 并计算加权和 (rm1) 和加权平均值 (rm2)。

    pandas.rolling_window

    窗口 : int 或 ndarray:
    加权窗口规范。如果窗口为整数,则视为窗口长度,需要win_type

    意思布尔值,默认为真
    如果 True 计算加权平均值,否则计算加权和

    【讨论】:

    • 如何在 pandas 0.20.3 中执行此操作 - 似乎方法 rolling_window 不再存在,我找不到替代方法。
    • @Make42 - 我不知道 :(
    【解决方案2】:

    首先在新的 pandas 版本中 rolling 语法已更改 如果你只需要三角形窗口,你可以这样做:

    ser.rolling(5, win_type='triang').mean()
    

    其他一些标准窗口are also supported

    如果您想要真正自定义(自制)平均重量,您可以像这样使用自定义.apply 和加权平均np.average

    import numpy as np
    
    # your code here
    
    weights = [1, 2, 8, 3, 2]  # something unusual
    ser.rolling(5).apply(lambda seq: np.average(seq, weights=weights))
    

    【讨论】:

      猜你喜欢
      • 2019-01-31
      • 2023-01-31
      • 2019-11-24
      • 2015-01-12
      • 2019-11-19
      • 1970-01-01
      • 2018-04-26
      • 1970-01-01
      • 2019-07-08
      相关资源
      最近更新 更多