【问题标题】:How can I generate a conditional rolling average?如何生成条件滚动平均值?
【发布时间】:2020-07-01 01:33:30
【问题描述】:

我希望能够根据在单独列中标记为 True 的值对数据列执行滚动平均值。下面是一个示例数据集。

                      Data        Condition
2020-01-01 0:00       2.0          False     
2020-01-01 0:01       2.0          False       
2020-01-01 0:02       732.1        True    
2020-01-01 0:03       734.2        True       
2020-01-01 0:04       733.3        True       
2020-01-01 0:05       731.2        True  
2020-01-01 0:06       2.0          False  
2020-01-01 0:07       2.0          False  
...
2020-06-15 23:52      2.0          False       
2020-06-15 23:53      732.1        True    
2020-06-15 23:54      734.2        True       
2020-06-15 23:55      733.3        True       
2020-06-15 23:56      731.2        True 
2020-06-15 23:57      2.0          False      
2020-06-15 23:58      2.0          False       
2020-06-15 23:59      2.0          False 

对于数据列,我的预期输出(窗口大小为 3)如下:

[2.0, 2.0, 733.15, 733.2, 732.9, 732.25, 2, 2, ..., 2.0, 733.15, 733.2, 732.9, 732.25, 2.0, 2.0, 2.0]。

所以本质上,对于每一行,它会取该行上方和下方行的平均值,以及有问题的行,但总是排除错误时的数字。

这是我找到的一些代码,只是它不适用于当前的 pandas。

pandas.rolling_mean(df[df.Condition], window=30) 我在这里找到了它:Conditional mean by rolling

任何有关这方面的帮助或信息将不胜感激!

【问题讨论】:

  • 在这种情况下,您的预期输出是什么,比如window=3
  • 我的预期输出是 [2.0, 2.0, 733.15, 733.2, 732.9, 732.25, 2, 2, ..., 2.0, 733.15, 733.2, 732.9, 732.25, 2.0, 2.0, 2.0]对于这种情况。
  • @wes.e 在问题中添加您的预期输出,以便更容易回答,并帮助通过 google 找到此问题的人。
  • 当然,没问题。

标签: python pandas rolling-computation


【解决方案1】:

我相信您会过滤数据框以仅获取符合您条件的行,然后应用滚动平均值。

df['rolling'] = df.loc[df['Condition'] == True]['Data'].rolling(30).mean().fillna(0)

【讨论】:

  • df.loc[df['Condition'] == True]['Data'] 应该是df.loc[df['Condition'] == True, 'Data']
  • 当我尝试这个时,我只是得到了滚动列的 NaN
  • 这样做与解决方案中的方法有很大区别吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-18
  • 2017-06-19
  • 2018-03-08
  • 1970-01-01
  • 2014-02-17
相关资源
最近更新 更多