【问题标题】:Calculate average of specified range of values in pandas column and store as another column计算 pandas 列中指定值范围的平均值并存储为另一列
【发布时间】:2020-02-18 05:59:50
【问题描述】:

我可以在 for 循环中计算平均值,但 并不 似乎是一个有效的解决方案。所以考虑以下DataFrame:

Index Numbers
    1      12
    2      19
    3      47
    4      78
    5      32
    6      63
    7      89

我想计算 上述四个值的第 4 个值之后的每个数字的平均值,并将其存储在相邻的列中。所以预期的输出是:

Index Numbers Average
    1      12       
    2      19       
    3      47
    4      78      39
    5      32      44
    6      63      55
    7      89    65.5

所以前四个数字的平均值,即索引(1 到 4)是 39,下一个(2 到 5)是 44,依此类推。有没有一种有效的方法来做到这一点?谢谢。

【问题讨论】:

    标签: python python-3.x pandas dataframe average


    【解决方案1】:

    Series.rollingmean 一起使用:

    df['Average'] = df['Numbers'].rolling(4).mean()
    print (df)
       Index  Numbers  Average
    0      1       12      NaN
    1      2       19      NaN
    2      3       47      NaN
    3      4       78     39.0
    4      5       32     44.0
    5      6       63     55.0
    6      7       89     65.5
    

    rolling实现的可能功能:

    Rolling.count Rolling.sum Rolling.mean Rolling.median Rolling.var Rolling.std Rolling.min Rolling.max Rolling.corr Rolling.cov Rolling.skew Rolling.kurt Rolling.apply Rolling.aggregate Rolling.quantile

    【讨论】:

    • 成功了!谢谢你。所以我也可以将滚动与其他功能一起使用?
    • 嘿,最后一个问题,如果我需要这样做,在索引 4 处取平均值执行一些计算,但存储在索引 5 处,其余部分执行相同操作。使用以前的值... 示例 (39.0 * 2) / 4 将输出存储在索引 5 处,然后为 44.0 执行,依此类推。
    • @YashGhorpade - 嗯,可以先将输出保存到相同的索引,然后使用Series.shift
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-05
    • 2020-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-12
    • 2021-08-19
    相关资源
    最近更新 更多