如何使用Pandas逐行计算列平均值及分段平均值?
解决方案
首先构造你的目标DataFrame:
import pandas as pd df = pd.DataFrame({'val': [10, 20, 30, 40, 30]}, index=[1, 2, 3, 4, 5])
1. 计算逐行累计平均值avg
用Pandas的expanding()方法,它会从第一行开始逐步扩展计算窗口,配合mean()就能直接得到逐行累计的平均值:
df['avg'] = df['val'].expanding().mean()
2. 计算分段累计平均值avg_sep
先给数据打分组标签:把索引≤3的行归为一组,索引>3的行归为另一组。再按分组计算组内的累计平均值:
# 生成分组标识,索引>3的行自动归为新分组 df['group'] = (df.index > 3).cumsum() # 按分组计算组内累计均值,去除分组索引层 df['avg_sep'] = df.groupby('group')['val'].expanding().mean().reset_index(level=0, drop=True) # 不需要分组列的话可以删除 df.drop('group', axis=1, inplace=True)
最终运行结果完全符合预期:
val avg avg_sep 1 10 10.0 10.0 2 20 15.0 15.0 3 30 20.0 20.0 4 40 25.0 40.0 5 30 26.0 35.0
内容的提问来源于stack exchange,提问作者OdiumPura
相关产品推荐
相关产品推荐

