【问题标题】:Conditional mean by rolling滚动条件均值
【发布时间】:2017-06-19 17:28:30
【问题描述】:
                  Data       flag
2017-01-01        17.2        False     
2017-01-02        17.0        False      
2017-01-03        16.8        False   
2017-01-04        18.3        False      
2017-01-05        19.1        True       
...
2017-12-28        20.1        False      
2017-12-29        19.8        False      
2017-12-30        18.9        False      
2017-12-31        19.5        False      

有一个带有值和标志的 pandas 数据框。 如果标志为“NOT TRUE”,我想通过滚动(window=30)计算平均值。

【问题讨论】:

  • 假设您有一个长度为 30 的窗口,您是否要计算该长度为 30 的窗口内非真值的平均值。意味着窗口将是小于 30 的子集?或者你想收集 30 个句点,跳过Trues?
  • 后一种。我想收集 30 个 False 句点,跳过 Trues。
  • 那么@ASGM 有你的答案。
  • @piRSquared 关于非真值如何处理第一个均值。
  • @Anflores df.Data.mask(df.flag).rolling(30, min_periods=1).mean() 做到了。但是,1 的最小周期意味着它将取前 29 个截断滚动观测值的平均值。你可能想df.Data.mask(df.flag).rolling(30, min_periods=1).mean().iloc[29:].reindex(df.index)

标签: python pandas conditional sliding


【解决方案1】:

您可以使用pandas.rolling_mean() 同时对数据框进行子集化以仅包含df.flag 为假的条目(~ 运算符反转布尔系列的真实性,获取df.flagFalse 的所有值)。

pandas.rolling_mean(df[~df.flag], window=30)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-08
    • 1970-01-01
    • 2014-02-17
    • 2017-08-31
    • 1970-01-01
    相关资源
    最近更新 更多