使用Python pandas按ID分组计算各月份数值平均值的实现问题
pandas实现ID维度月度平均值统计方案
核心实现逻辑
直接使用pandas内置的pivot_table方法即可一步完成分组聚合+宽表转换的需求,不需要额外写循环逻辑,适配你150+ID、覆盖12个月的全量数据规模。
具体代码
1. 基础依赖导入&数据读取
import pandas as pd import numpy as np # 读入数据,这里指定ID列为字符串类型,避免001这类带前导零的ID被自动转成数值丢失前导零 df = pd.read_csv("你的数据文件路径.csv", dtype={"ID": str})
如果你的数据已经通过其他方式加载为DataFrame,可跳过读取步骤直接执行后续逻辑。
2. 生成目标结果表
result = pd.pivot_table( df, index="ID", # 指定ID作为行索引,最终输出第一列为ID columns="Month", # 指定月份作为列表头 values="Value", # 指定要计算平均值的数值列 aggfunc="mean", # 聚合规则设为求平均值 fill_value=np.nan # 无数据的位置填充占位符,需要填0就改成0,需要填其他值直接替换即可 ) # 可选操作:将ID从索引转为普通列 result = result.reset_index() # 可选操作:将表头改为"X月"格式 result = result.rename(columns=lambda col: f"{col}月" if isinstance(col, int) else col) # 可选操作:所有平均值保留两位小数 result = result.round(2)
效果验证
用你提供的样例数据执行上述代码后,ID为021的8月平均值计算结果为18926.76,和你预期的计算结果完全一致,无数据的单元格会按你设置的fill_value自动填充。
内容的提问来源于stack exchange,提问作者markovv.sim
相关产品推荐
相关产品推荐

