【问题标题】:Calculating moving averages efficiently on big datasets in Python 2.7在 Python 2.7 中有效计算大数据集的移动平均值
【发布时间】:2016-11-23 13:09:40
【问题描述】:

我正在学习在 Python 中计算具有两个以上变量的大型数据集的移动平均值。这里我有日期、公司 ID 和页面浏览量:

    Date        CompanyID   PageViews
    01/01/2016     023        420       
    02/01/2016     023        362       
    03/01/2016     023        214       
    …               …          …        
    05/06/2016     311        54        
    06/06/2016     311        35        
    07/06/2016     311        69        
    …              …           …        
    04/03/2016     465        49        
    05/03/2016     465        17        
    …              …          … 

我想计算文件中每个公司和日期的 2 天移动平均值,并将结果存储为新变量 Avg2。输出应如下所示:

    Date        CompanyID   PageViews      Avg2
    01/01/2016      023        420          NA
    02/01/2016      023        362         391  
    03/01/2016      023        214         288
    …                …          …           …   
    05/06/2016      311        54           NA
    06/06/2016      311        35          44.5
    07/06/2016      311        69          52
    …                …          …           …   
    04/03/2016      465        49           NA
    05/03/2016      465        17          33
    …                …          …           …   

如果不按每家公司手动计算,我如何有效地做到这一点? (我有 500 家独特的公司)。

我尝试过这样做:

    import pandas as pd
    df = pd.read_csv('C:/Users/.../DataSet.csv', sep=',')
    df['Avg2'] = pd.rolling_mean(df.PageViews, window=2)

但它忽略了 CompanyID。

【问题讨论】:

  • 你的 python 代码在哪里卡住了?
  • 我建议先按公司索引,然后再按日期索引,然后对每个公司运行移动平均算法
  • 你说的是什么意思?“不用手动计算每个公司?”
  • @Prajwal,我的意思是我可以过滤每家公司的数据并分别计算每家公司的移动平均值,但是拥有 500 家独特的公司需要很长时间才能做到这一点。我以前没有使用过 Python,所以我真的不知道如何在整个数据集上有效地做到这一点。
  • @Chris_Rands,我添加了我所做的。但是,该代码忽略了 CompanyID,我得到了不恰当的结果。

标签: python statistics moving-average data-science


【解决方案1】:

如果您使用的是 30 天移动平均线,请保留前 30 天的总和。然后对于随后的每一天,减去第一天并添加随后的一天。您将在一次减法、一次加法和一次除法中获得每个移动平均线(而不是 30 次加法和一次除法)。

如果你想从数组中剔除一家公司,Python 有很多方法可以做到这一点。

【讨论】:

    猜你喜欢
    • 2015-05-03
    • 2017-12-19
    • 2018-05-08
    • 2021-06-06
    • 1970-01-01
    • 2010-10-04
    • 2021-05-30
    • 1970-01-01
    相关资源
    最近更新 更多