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

Pandas按标签计算均值:如何简便实现分组统计年龄/体重均值?

问题

我有一个包含多个标签的DataFrame,希望计算每个标签对应的年龄、体重均值,请问是否存在更简便的实现方式?现有实现代码如下:

import numpy as np
import pandas as pd  # 原代码缺失该导入,补充后才能正常运行
data = [['tom', 10,20],['tom', 12,30], ['nick', 15,40],['nick', 12,50], ['juli', 14,35],['juli', 16,38]]
df = pd.DataFrame(data, columns=['Name', 'Age','Weight'])
list_of_uniqe_values = []
mean=[]
for el in df.Name.unique():
    list_of_uniqe_values.append(el)

for el in list_of_uniqe_values:
    innerlist = []
    for col in range(1, len(df.columns)):
        innerlist.append(np.mean(df.iloc[:,col].where(df['Name']==el)))
    mean.append(innerlist)
print(mean)
更简便的实现方案

当然有,Pandas内置的groupby()搭配mean()方法可以直接完成分组均值计算,完全不需要手动嵌套循环,代码简洁且效率更高:

import pandas as pd

data = [['tom', 10,20],['tom', 12,30], ['nick', 15,40],['nick', 12,50], ['juli', 14,35],['juli', 16,38]]
df = pd.DataFrame(data, columns=['Name', 'Age','Weight'])

# 按Name分组,计算指定列的均值
grouped_mean = df.groupby('Name')[['Age', 'Weight']].mean()
print(grouped_mean)

运行输出:

Age  Weight
Name              
juli  15.0    36.5
nick  13.5    45.0
tom   11.0    25.0

额外补充:

  • 如果需要和原代码输出格式一致的列表结构,只需添加.values.tolist()转换:

print(grouped_mean.values.tolist()) # 输出:[[15.0, 36.5], [13.5, 45.0], [11.0, 25.0]]

- 原代码遗漏了`pandas`的导入语句,实际运行会报错,上述代码已补充完整。
- `groupby()`是Pandas处理分组统计的核心工具,除了`mean()`,还支持`sum()`、`max()`、`min()`等多种聚合操作,适配更多统计需求。

内容的提问来源于stack exchange,提问作者Julian
相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 06:50:29