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

Pandas合并重复行:累加足球运动员赛季转会后的积分

搞定Pandas合并转会球员重复行并累加数据的问题

嘿,我来帮你解决这个转会球员重复行合并的问题!首先得明确:咱们判断是不是同一个球员,得靠full_name这个唯一标识——毕竟像示例里的两个Bruno,名字缩写一样但全名不同,肯定是俩不同的球员对吧?所以核心思路就是按球员的全名分组,把他们在不同俱乐部(或者同一俱乐部不同阶段)的积分、首发/替补次数这些数据累加起来,其他信息按需整理。

先理清楚你的数据情况

先把你给的示例数据整理得清楚点:

namefull_nameclubPointsStartSub
84S. MustafiShkodran MustafiArsenal76261
85S. MustafiShkodran MustafiArsenal-201
89BrunoBruno Soriano LlidoVillarreal CF431516
90BrunoBruno Gonzalez CabreraGetafe CF431516

你看,S. Mustafi是同一球员的两行记录(可能是赛季不同阶段的数据),而两个Bruno是完全不同的球员,所以分组的时候必须用full_name才不会出错。

直接上代码解决方案

方法1:灵活自定义聚合规则(推荐)

这种方法可以针对每一列设置不同的处理逻辑,比如把球员效力过的俱乐部都列出来,数值列直接累加:

import pandas as pd

# 假设你的DataFrame叫df
# 定义每一列的聚合规则
agg_rules = {
    'name': 'first',  # 取第一个出现的名字缩写就行,毕竟和full_name一一对应
    'club': lambda x: ', '.join(x.unique()),  # 把所有效力过的俱乐部用逗号拼起来
    'Points': 'sum',  # 核心需求:累加积分
    'Start': 'sum',   # 首发次数也一起累加吧
    'Sub': 'sum'      # 替补次数同理
}

# 按full_name分组,应用规则,as_index=False让分组列不变成索引
merged_df = df.groupby('full_name', as_index=False).agg(agg_rules)

方法2:简化版(如果name和full_name完全对应)

要是你确定name和full_name是一一对应的,也可以把这俩一起作为分组键,代码更简洁:

merged_df = df.groupby(['full_name', 'name'], as_index=False).agg({
    'club': lambda x: ', '.join(x.unique()),
    'Points': 'sum',
    'Start': 'sum',
    'Sub': 'sum'
})

看看处理后的效果

比如S. Mustafi的记录会合并成一行:

full_namenameclubPointsStartSub
Shkodran MustafiS. MustafiArsenal74262

而两个Bruno会各自保留独立的行,因为他们的全名不一样,不会被错误合并。

额外小技巧

  • 要是你只想保留球员最后效力的俱乐部,把club的聚合规则改成'club': 'last'就行;
  • 要是还有其他列需要处理,直接在聚合规则里加对应的逻辑就好,比如日期列取最早/最晚,都很灵活。

内容的提问来源于stack exchange,提问作者pandasman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:50:41