Pandas groupby合并英雄联盟赛事重复对局数据 如何拆分统计各位置金币占比
英雄联盟赛事数据统计优化方案
问题根因
你当前使用的分组键['Team', 'Opponent', 'Result']无法唯一标识单局赛事,相同对阵、相同胜负结果的多局数据会被合并计算,导致统计结果不符合预期。
优化实现(无需额外新建DataFrame)
不需要单独生成新表存储对局编号,直接在原数据表内生成唯一对局标识即可,完整代码如下:
import pandas as pd datafile = "LoL_raw_data.csv" df = pd.read_csv(datafile) # 1. 生成单局唯一标识 # 若数据表头已有对局ID类字段(如gameid、matchid),直接赋值即可: df['game_id'] = df['gameid'] # 若无现成对局ID,可按数据顺序每10行对应1局(每局两队共10名选手)自动生成: # df['game_id'] = df.index // 10 # 2. 统计每局每队总金币,合并回原表 team_game_total = df.groupby(['game_id', 'Team'])['gold'].sum().reset_index(name='team_total_gold') df = df.merge(team_game_total, on=['game_id', 'Team']) # 3. 计算单局内选手金币占队伍总金币比例 df['gold_pct'] = df['gold'] / df['team_total_gold'] # 4. 统计各位置平均金币(可灵活调整分组维度) # 全赛事各位置平均金币 pos_avg_gold = df.groupby('Position')['gold'].mean().reset_index(name='avg_gold') # 各队伍各位置平均金币 team_pos_avg_gold = df.groupby(['Team', 'Position'])['gold'].mean().reset_index(name='avg_gold')
参考截图
- 原分组代码截图:

- 数据表头截图:

内容的提问来源于stack exchange,提问作者Nicholas Jones
相关产品推荐
相关产品推荐

