基于DataFrame匹配值及索引关联更新字段值的实现问题
问题解决:DataFrame匹配替换值
首先修正你提供的DataFrame语法错误(df_team中'Con Team'缺少闭合引号):
import pandas as pd import numpy as np df_team = pd.DataFrame({ 'Team': ["Cal", "Bos", "Flo", "NY", "KC"], 'Con Team': ["California", "Boston", "Florida", "New York", "Kansas City"] }) df_sched = pd.DataFrame({ 'Team': ["Bos", "NY", "KC"] })
你之前代码的问题
df_sched不存在'Con Team'列,直接引用会触发KeyErrornp.where + isin仅能判断值是否存在,无法建立df_sched['Team']与df_team['Con Team']的映射关系,所以无法完成替换
正确实现方法
方法1:使用map(最简洁)
先将df_team转换为键值对字典,再用map完成匹配替换:
# 生成Team到Con Team的映射字典 team_to_con = df_team.set_index('Team')['Con Team'].to_dict() # 替换df_sched的Team列 df_sched['Team'] = df_sched['Team'].map(team_to_con) # 输出结果 print(df_sched) # Team # 0 Boston # 1 New York # 2 Kansas City
如果需要保留未匹配的原始值(比如假设df_sched有不在df_team里的Team),可以用fillna:
df_sched['Team'] = df_sched['Team'].map(team_to_con).fillna(df_sched['Team'])
方法2:使用replace
和map逻辑类似,直接传入映射字典即可:
df_sched['Team'] = df_sched['Team'].replace(team_to_con)
方法3:使用merge(适合复杂关联场景)
如果需要保留更多关联数据,或者处理多列匹配,用merge更灵活:
# 左连接两个DataFrame,保留df_sched的所有行 merged = df_sched.merge(df_team, on='Team', how='left') # 将Con Team的值替换到原Team列,未匹配的保留原Team值 df_sched['Team'] = merged['Con Team'].fillna(merged['Team'])
内容的提问来源于stack exchange,提问作者Link
相关产品推荐
相关产品推荐

