如何按分类列分组计算DataFrame各分组数值的平均值?
pandas按name分组计算value列平均值的实现
针对你的两列DataFrame场景,直接用pandas内置的分组聚合逻辑就能实现,不需要手动提前去重name列,分组操作会自动将相同name的行归为同一类做统计。
最推荐的标准写法
这个写法输出结构最规整,可读性最高:
import pandas as pd # df是你存储原始数据的DataFrame变量 avg_result = df.groupby('name', as_index=False)['value'].mean()
参数说明:
as_index=False:分组使用的name列会作为普通列保留在结果中,不会被设为结果表的行索引,和原始表的列结构保持一致['value'].mean():指定对每个name分组下的value列计算算术平均值,默认会自动跳过列中的空值不参与计算
用你给出的样例数据测试,name为a的两行value分别是5和3,最终计算得到的平均值为4,符合预期;仅出现一次的name(比如样例里的b、c),计算结果就是其对应的value本身。
其他可选写法
如果你不介意name列暂时作为结果的行索引,可以用更简短的写法:
avg_result = df.groupby('name')['value'].mean()
如果后续需要把索引转回普通列,链式调用reset_index()即可:
avg_result = df.groupby('name')['value'].mean().reset_index()
扩展场景
如果你需要同时对每个name计算多个统计指标(比如平均值、总和、数据条数),可以用agg方法传入多个统计函数:
# 一次性得到每个name对应的value平均值、求和值、样本计数 multi_stat_result = df.groupby('name', as_index=False)['value'].agg(['mean', 'sum', 'count'])
内容的提问来源于stack exchange,提问作者Carlos Castanos
相关产品推荐
相关产品推荐

