Pandas按列计算玩家正确率后按团队列求均值的高效实现方法
高效实现方案
直接使用pandas内置的groupby分组聚合操作即可完成需求,全程为底层C实现的矢量化运算,相比手动拆分DataFrame效率提升非常明显,尤其适合大数据量场景。
核心逻辑
- 先按
player+school+team分组,计算每个玩家的个人成绩(布尔值True对应1、False对应0,直接求均值即可得到(True数量/总考试数)的结果) - 再按
school+team分组,对所有玩家的个人成绩求均值并保留两位小数,得到最终团队成绩
代码示例
import pandas as pd # 第一步:计算每个玩家的个人通过率 player_score = df.groupby( ["player", "school", "team"], as_index=False )["result"].mean().rename(columns={"result": "personal_score"}) # 第二步:按团队分组计算平均成绩 team_result = player_score.groupby( ["school", "team"], as_index=False )["personal_score"].mean().round(2).rename(columns={"personal_score": "TeamResult"})
运行后输出的team_result就是你需要的结果格式。
效率说明
你之前手动筛选拆分DataFrame的方式,本质是在Python层做循环遍历,数据量越大性能损耗越高。而pandas的groupby聚合操作是底层优化过的运算,避免了Python层的循环开销,性能可以提升几个数量级。
内容的提问来源于stack exchange,提问作者futuredataengineer
相关产品推荐
相关产品推荐

