如何用其他DataFrame列按匹配条件替换Pandas DataFrame的ID列
用Pandas将ID列批量替换为对应名称
示例数据构造
先还原你提供的DataFrame:
import pandas as pd # 构造df1 df1 = pd.DataFrame({ 'f_id': [0, 1], 'l_id': [0, 1], 'p_id': [1, 2], 's_id': [1, 2] }) # 构造df2 df2 = pd.DataFrame({ 'f_id': [0, 1], 'f_name': ['Johen', 'Joe'] }) # 构造df3 df3 = pd.DataFrame({ 'l_id': [0, 1], 'l_name': ['Ardi', 'Peykan'] })
替换ID为名称的实现
核心思路是把df2、df3转换成ID-名称映射字典,再用map()方法对df1的对应列做批量替换,自动适配ID顺序混乱、DataFrame长度不一致的场景:
# 生成ID到名称的映射字典 f_map = df2.set_index('f_id')['f_name'].to_dict() l_map = df3.set_index('l_id')['l_name'].to_dict() # 替换df1中的ID列 df1['f_id'] = df1['f_id'].map(f_map) df1['l_id'] = df1['l_id'].map(l_map) # 可选:如果df1存在df2/df3中没有的ID,用fillna保留原ID # df1['f_id'] = df1['f_id'].map(f_map).fillna(df1['f_id'])
最终结果
运行后得到的df1就是目标结果:
f_id l_id p_id s_id 0 Johen Ardi 1 1 1 Joe Peykan 2 2
补充说明
- 不管df2/df3的ID顺序和df1是否一致,
map()都会根据ID值精准匹配替换 - 若df1中存在df2/df3未覆盖的ID,默认会转为
NaN,可通过fillna保留原ID值 - 该方法效率较高,适合处理大规模数据
内容的提问来源于stack exchange,提问作者ijavadddd
相关产品推荐
相关产品推荐

