Pandas中多列关联并生成_loc后缀列的实现方案咨询
如何将多个DataFrame列关联匹配并添加对应列?
我来给你捋捋怎么实现这个需求——你需要把df1里的每一列(pri、sec0这些)都和df2的name列做匹配,给每个列加上对应的loc值,还要保证原列和新生成的_loc列相邻对吧?
首先咱们先把测试用的DataFrame构造出来,方便后续验证:
import pandas as pd # 构造df1 df1 = pd.DataFrame({ 'pri': ['ACL', 'ABC', 'XYZ'], 'sec0': ['EMR', 'MKB', 'LMN'], 'sec1': ['DFG', 'JKL', 'SDF'], 'sec2': ['XHD', 'KLF', 'GHY'] }) # 构造df2 df2 = pd.DataFrame({ 'name': ['ACL', 'EMR', 'DFG', 'XHD', 'ABC', 'MKB', 'JKL', 'KLF', 'XYZ', 'LMN', 'SDF', 'GHY'], 'loc': [12, 23, 431, 48, 55, 699, 70, 82, 93, 10, 235, 53] })
接下来给你两种实现方式,你可以根据自己的习惯选:
方式一:用映射字典+map(简洁高效)
这种方式适合数据量较大的场景,匹配速度更快:
# 先把df2转成「名称: loc值」的字典,方便快速查找 loc_mapping = df2.set_index('name')['loc'].to_dict() # 遍历df1的每一列,生成对应的_loc列 for col in df1.columns: df1[f'{col}_loc'] = df1[col].map(loc_mapping) # 调整列顺序,让原列和对应的_loc列挨在一起 new_columns = [] for col in df1.columns[:4]: # 原df1有4列,取前4个就是pri、sec0这些原列名 new_columns.append(col) new_columns.append(f'{col}_loc') df1 = df1[new_columns] # 看看结果 print(df1)
执行后就能得到你想要的输出格式,每一列都跟着对应的_loc列。
方式二:用merge逐列关联
如果你更习惯用merge的方式,也可以逐列和df2做关联,不过代码会稍微繁琐一点:
# 从df1开始,先关联pri列 result = df1.merge(df2, left_on='pri', right_on='name').rename(columns={'loc': 'pri_loc'}).drop('name', axis=1) # 接着关联sec0列 result = result.merge(df2, left_on='sec0', right_on='name').rename(columns={'loc': 'sec0_loc'}).drop('name', axis=1) # 依次处理sec1和sec2 result = result.merge(df2, left_on='sec1', right_on='name').rename(columns={'loc': 'sec1_loc'}).drop('name', axis=1) result = result.merge(df2, left_on='sec2', right_on='name').rename(columns={'loc': 'sec2_loc'}).drop('name', axis=1) # 最后调整列顺序到预期格式 result = result[['pri', 'pri_loc', 'sec0', 'sec0_loc', 'sec1', 'sec1_loc', 'sec2', 'sec2_loc']] print(result)
两种方式都能得到你想要的结果,第一种更简洁高效,推荐优先使用~
内容的提问来源于stack exchange,提问作者Avinash Clinton
相关产品推荐
相关产品推荐

