如何在无共同列名的两个pandas DataFrame间实现VLOOKUP匹配
解决方法
你可以通过统一公司名格式、宽表转换、指定匹配键的方式完成合并,具体操作如下:
步骤1:预处理buffer表,解决大小写不一致问题并转换为宽表
首先处理buffer里的公司名大小写混乱(比如AppLA和ApplA实际为同一家)、冗余值问题,再转为你需要的三列结构:
import pandas as pd # 1. 过滤无效Place值,统一公司名字母格式 buffer_processed = buffer[buffer['Place'].isin(['U10', 'U20', 'U30'])].copy() # 统一转小写匹配,也可以根据实际规则调整为大小写首字母一致 buffer_processed['match_name'] = buffer_processed['Name'].str.lower() # 同一个公司同一个Place去重 buffer_processed = buffer_processed.drop_duplicates(subset=['match_name', 'Place']) # 2. 转为宽表,生成三个PLACE列 buffer_pivot = buffer_processed.pivot( index='match_name', columns='Place', values='Place' ).reset_index() # 重命名为要求的列名 buffer_pivot = buffer_pivot.rename(columns={ 'U10': 'PLACE U10', 'U20': 'PLACE U20', 'U30': 'PLACE U30' })
步骤2:和df表合并
给df也生成统一格式的匹配键,指定左右键合并即可:
# 生成和buffer对应的匹配键 df['match_name'] = df['Code'].str.lower() # 合并,合并后删除临时的match_name列 df_final = df.merge( buffer_pivot, on='match_name', how='left' ).drop('match_name', axis=1)
结果调整
合并后的df_final就是你需要的结构,没有对应Place值的位置会自动填充NaN,你可以按需替换为空字符串:
df_final[['PLACE U10', 'PLACE U20', 'PLACE U30']] = df_final[['PLACE U10', 'PLACE U20', 'PLACE U30']].fillna('')
内容的提问来源于stack exchange,提问作者Bianconera
相关产品推荐
相关产品推荐

