You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在无共同列名的两个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 01:54:03