两个结构相同的Pandas DataFrame按标识列聚合求和生成第三个DataFrame
解决方案
你可以先将两个DataFrame纵向拼接,再按球员唯一标识列分组求和,该方案兼容两个DataFrame球员名单不完全一致的场景,是最稳妥的实现方式:
import pandas as pd d1 = {'PlayerID': [1, 2], 'Name': ['Tyreek', 'Amari'], 'Targets': [15, 16], 'Receptions': [11, 13]} df1 = pd.DataFrame(data=d1) d2 = {'PlayerID': [1, 2], 'Name': ['Tyreek', 'Amari'], 'Targets': [4, 5], 'Receptions': [3,3]} df2 = pd.DataFrame(data=d2) # 核心逻辑:先拼接再分组求和 df_season_total = pd.concat([df1, df2]).groupby( by=['PlayerID', 'Name'], # 指定分组键,相同球员的多条数据会被分到同一组 as_index=False # 不将分组键转为索引,保持原列结构 ).sum(numeric_only=True) # 仅对数值列求和,避免字符串列报错
运行后得到的df_season_total即为你需要的累计统计结果:
| PlayerID | Name | Targets | Receptions |
|---|---|---|---|
| 1 | Tyreek | 19 | 14 |
| 2 | Amari | 21 | 16 |
如果你能100%确认两个DataFrame的行数、球员顺序、PlayerID/Name完全匹配,也可以用更简便的写法:
df_season_total = df1.copy() # 直接对指定的数值列相加 df_season_total[['Targets', 'Receptions']] = df1[['Targets', 'Receptions']] + df2[['Targets', 'Receptions']]
内容的提问来源于stack exchange,提问作者jeffrey maier
相关产品推荐
相关产品推荐

