如何用pandas按列分组计算累计均值(无循环无lambda适配大数据量)
解决方案
可以直接使用pandas内置的expanding扩展窗口函数实现,无需循环或lambda表达式,性能适配大数据量场景:
核心代码
# 按name分组后计算累计平均值,保留两位小数 df['avg'] = df.groupby('name')['num'].expanding().mean().reset_index(drop=True).round(2)
代码说明
groupby('name'):按name列独立分组计算,组间互不干扰expanding():生成扩展窗口,窗口范围为分组内第一行到当前行,正好匹配「截至当前行」的计算需求mean():计算窗口内num列的平均值reset_index(drop=True):消除分组运算产生的多级索引,和原DataFrame行顺序对齐round(2):保留两位小数,匹配预期输出格式
若同一name下的date不是按时间升序排列,可先排序再计算:
df = df.sort_values(['name', 'date']).reset_index(drop=True) df['avg'] = df.groupby('name')['num'].expanding().mean().reset_index(drop=True).round(2)
内容的提问来源于stack exchange,提问作者Android44
相关产品推荐
相关产品推荐

