You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按Name列分组计算多列所有数值的平均值?

问题说明

原始数据表格:

Namescore1score2score3
Bob100120900
Lisa4012090
Bob59049080
Tim100120900
Tim4012090
Bob59049080

需求:按Name列的不同人员分组,计算该人员所有行内score1、score2、score3全部数值的平均值。比如Bob有3行数据,共9个数值,要计算这9个值的整体平均值,而非每行平均值再求平均。

已知以下代码用于计算每行多列的平均值:

df['averages'] = df[['Score1', 'Score2', 'Score3']].mean(axis=1)
修改方案

要实现按姓名分组的整体平均值计算,可采用以下两种简洁方法:

方法一:堆叠列后计算分组平均

# 按Name分组,将每组的score列堆叠为一维序列,再按Name层级求平均
grouped_overall_avg = df.groupby('Name')[['score1', 'score2', 'score3']].stack().mean(level=0)

逻辑:stack()会把每组的三列score数据平铺成一列,此时每组所有score值都在同一个序列里,mean(level=0)指定按原分组的Name维度计算平均,直接得到每个人员所有score数值的整体平均值。

方法二:总和除以总数值个数

# 先算每组所有score的总和,再除以该组的总数值数量(行数×3)
grouped_overall_avg = df.groupby('Name')[['score1', 'score2', 'score3']].sum().sum(axis=1) / (df.groupby('Name').size() * 3)

逻辑:先按Name分组,计算每组各score列的和,再对这些和求和得到该人员的总分数;df.groupby('Name').size()得到每组的行数,乘以3就是该人员的总数值个数,总分数除以总个数即为整体平均值。

合并回原表格(可选)

如果需要把计算出的整体平均值添加到原DataFrame的对应行,可用map:

df['overall_average'] = df['Name'].map(grouped_overall_avg)

内容的提问来源于stack exchange,提问作者EvitaSchaap

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 22:23:19