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
相关产品推荐
相关产品推荐

