如何在Pandas DataFrame中通过同表查找创建op_team_pace列?
如何通过对手比赛代码匹配Pandas DataFrame中的对手节奏值
你可以通过两种简单方法实现需求:利用字典映射或DataFrame合并,以下是具体步骤:
先构造示例数据(方便测试)
import pandas as pd data = { 'team': ['ABC', 'ABC', 'KLM', 'KLM', 'XYZ', 'XYZ'], 'game_code': ['ABC_01-01-2010', 'ABC_02-12-2010', 'KLM_02-12-2010', 'KLM_03-11-2010', 'XYZ_01-01-2010', 'XYZ_03-11-2010'], 'opponent': ['XYZ', 'KLM', 'ABC', 'XYZ', 'ABC', 'KLM'], 'team_pace': [50, 48, 65, 62, 47, 63], 'op_game_code': ['XYZ_01-01-2010', 'KLM_02-12-2010', 'ABC_02-12-2010', 'XYZ_03-11-2010', 'ABC_01-01-2010', 'KLM_03-11-2010'] } df = pd.DataFrame(data)
方法1:字典映射(高效简洁)
因为game_code是唯一标识,先创建game_code到team_pace的映射字典,再用op_game_code匹配取值:
# 构建比赛代码到节奏值的映射 pace_mapping = df.set_index('game_code')['team_pace'].to_dict() # 生成对手节奏值列 df['op_team_pace'] = df['op_game_code'].map(pace_mapping)
方法2:DataFrame合并(直观清晰)
将原DataFrame与自身合并,通过op_game_code和game_code匹配,提取对手的节奏值:
# 重命名列后合并,匹配对手数据 df = df.merge( df[['game_code', 'team_pace']].rename(columns={'game_code': 'op_game_code', 'team_pace': 'op_team_pace'}), on='op_game_code', how='left' )
处理后结果
两种方法都会得到符合预期的DataFrame:
| team | game_code | opponent | team_pace | op_game_code | op_team_pace |
|---|---|---|---|---|---|
| ABC | ABC_01-01-2010 | XYZ | 50 | XYZ_01-01-2010 | 47 |
| ABC | ABC_02-12-2010 | KLM | 48 | KLM_02-12-2010 | 65 |
| KLM | KLM_02-12-2010 | ABC | 65 | ABC_02-12-2010 | 48 |
| KLM | KLM_03-11-2010 | XYZ | 62 | XYZ_03-11-2010 | 63 |
| XYZ | XYZ_01-01-2010 | ABC | 47 | ABC_01-01-2010 | 50 |
| XYZ | XYZ_03-11-2010 | KLM | 63 | KLM_03-11-2010 | 62 |
方法选择
- 字典映射:性能更优,适合处理大规模数据集
- 合并方法:逻辑更直观,若后续需要提取对手更多字段,扩展性更强
内容的提问来源于stack exchange,提问作者Ivan
相关产品推荐
相关产品推荐

