Pandas跨多列计算各运动参与者的平均年龄与体重
Pandas高效计算每项运动参与者的平均年龄和体重
不需要用循环或者会生成组合的groupby,用向量化矩阵运算是最高效的方式,直接一次性计算所有运动的统计值:
实现代码
import pandas as pd df = pd.DataFrame([ [0, 1, 0, 30, 150], [1, 1, 1, 25, 200], [1, 0, 0, 20, 175] ], columns=[ "Plays Basketball", "Plays Soccer", "Plays Football", "Age", "Weight" ]) # 分离运动列和需要统计的数值列 sports_cols = df.columns[:3] numeric_cols = ['Age', 'Weight'] # 计算每项运动的参与人数 participant_counts = df[sports_cols].sum(axis=0) # 用矩阵乘法计算每项运动对应的年龄、体重总和 # 运动列转置后和数值列做内积,得到每个运动的总年龄、总重量 total_stats = df[sports_cols].T @ df[numeric_cols] # 计算平均值 result = total_stats / participant_counts print(result)
输出结果
Age Weight Plays Basketball 22.5 187.5 Plays Soccer 27.5 175.0 Plays Football 25.0 200.0
为什么高效?
这个方法完全用Pandas的向量化操作完成,避免了逐行循环或者分组的额外开销:
- 矩阵乘法
@一次性完成所有运动的总和计算,比循环遍历每个运动列快得多 - 所有操作都是基于Pandas底层的优化实现(依赖NumPy的C语言运算),性能远高于Python层面的循环
内容的提问来源于stack exchange,提问作者Scott Guthart
相关产品推荐
相关产品推荐

