【问题标题】:Optimal way to take mean of Series取系列平均值的最佳方法
【发布时间】:2022-01-20 05:51:46
【问题描述】:

对于由 DateTime 索引组织的 DataFrame,对其中的列进行连续滚动均值的最佳方法是什么?

例如:

2021-12-20 09:30:00       6.0
2021-12-20 09:31:00      36.0
2021-12-20 09:32:00      37.0
2021-12-20 09:33:00      41.0
2021-12-20 09:34:00      73.0

我的目标是创建一个新列,其中第一个值是第一行的平均值 (6),第二行是前两行的平均值,依此类推。这可以通过 Pandas 实现,还是我必须遍历整个 DataFrame?另外,是否可以在每天 9:30:00 将此列重置为第一卷?

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    DataFrame.expandingmean 一起使用:

    df['A'].expanding().mean()
    

    09:30 开头的每个组都可以创建助手组:

    import datetime
    
    g = np.cumsum(df.index.time == datetime.time(9, 30))
    df.groupby(g)['A'].expanding().mean()
    

    print (df)
                            A
    2021-12-20 09:30:00   6.0
    2021-12-20 09:31:00  36.0
    2021-12-20 09:32:00  37.0
    2021-12-20 09:33:00  41.0
    2021-12-20 09:34:00  73.0
    2021-12-21 09:30:00   6.0
    2021-12-21 09:31:00  36.0
    2021-12-21 09:32:00  37.0
    2021-12-21 09:33:00  41.0
    2021-12-21 09:34:00  73.0
    
    import datetime
    
    g = np.cumsum(df.index.time == datetime.time(9, 30))
    
    df['rolling mean'] = df['A'].expanding().mean()
    df['reset'] = df.groupby(g)['A'].expanding().mean().droplevel(0)
    print (df)
                            A  rolling mean      reset
    2021-12-20 09:30:00   6.0      6.000000   6.000000
    2021-12-20 09:31:00  36.0     21.000000  21.000000
    2021-12-20 09:32:00  37.0     26.333333  26.333333
    2021-12-20 09:33:00  41.0     30.000000  30.000000
    2021-12-20 09:34:00  73.0     38.600000  38.600000
    2021-12-21 09:30:00   6.0     33.166667   6.000000
    2021-12-21 09:31:00  36.0     33.571429  21.000000
    2021-12-21 09:32:00  37.0     34.000000  26.333333
    2021-12-21 09:33:00  41.0     34.777778  30.000000
    2021-12-21 09:34:00  73.0     38.600000  38.600000
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-08
      • 1970-01-01
      • 2022-07-21
      • 1970-01-01
      • 1970-01-01
      • 2019-05-02
      相关资源
      最近更新 更多