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

Pandas不同列名DataFrame通过ID匹配求和球员总得分问题求解

问题解决步骤

1. 修正原始数据的语法错误

你提供的示例数据存在语法问题,先调整为合法可运行的代码:

import pandas as pd

wizards = {'player_id': ["3", "4", "0", "9"],
    'name':["beal", "avdija", "hachimura", "dinwiddie"],
    'total points': [0]*4 # 初始化空值
}
stat_sheet = {'jersey_number': ["9", "9" , "0", "3", "4", "0", "9", "9", "9" , "0", "3", "4", "0", "9"], # 移除原始数据中多余的空逗号
'total points':[40, 20, 12, 14, 55, 67, 10, 22, 22, 5, 3, 12, 5, 1]}
wiz_df = pd.DataFrame(wizards)
weeklystats_df = pd.DataFrame(stat_sheet)

2. 核心实现代码

不需要编写嵌套循环,两种常用实现方式如下:

方式1:分组汇总后左连接赋值

# 先按球衣号统计每个球员的总得分
point_sum = weeklystats_df.groupby('jersey_number', as_index=False)['total points'].sum()
# 关联两个表,通过left_on、right_on指定不同名的关联列
wiz_df = wiz_df.merge(point_sum, left_on='player_id', right_on='jersey_number', how='left', suffixes=('', '_sum'))
# 把汇总得分赋值到目标列
wiz_df['total points'] = wiz_df['total points_sum']
# 删除多余的辅助列
wiz_df = wiz_df.drop(columns=['jersey_number', 'total points_sum'])

方式2:用map方法直接映射得分

# 生成 球衣号-总得分 的映射字典
point_map = weeklystats_df.groupby('jersey_number')['total points'].sum().to_dict()
# 用player_id匹配映射字典直接赋值
wiz_df['total points'] = wiz_df['player_id'].map(point_map)

3. 运行结果

最终wiz_df的total points列会自动填充对应球员的总得分:

  • player_id为3的beal总得分是17
  • player_id为4的avdija总得分是67
  • player_id为0的hachimura总得分是89
  • player_id为9的dinwiddie总得分是115

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 04:09:05