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

基于Column A字符串匹配计算DF1与DF2的Column B差值,无匹配返回NaN

解决方案:基于字符串匹配计算两个DataFrame的列差值

我来帮你搞定这个需求!针对两个行数多、顺序不一致的DataFrame,我们可以用pandas的左连接(left join)功能轻松实现,完全满足你以DF1为基准、无匹配项返回NaN的要求。

核心思路

  1. 先将DF2的目标列(Column A和Column B)单独提取并重命名,避免和DF1的列名冲突;
  2. 以DF1为主体,和处理后的DF2做左连接,这样DF1的所有行都会被保留,匹配到DF2的行会带上对应Column B的值,未匹配的则为NaN;
  3. 直接计算两列的差值,自动处理NaN的情况。

代码实现

首先我们模拟示例数据(你可以替换成自己的真实数据):

import pandas as pd

# 模拟DF1和DF2
df1 = pd.DataFrame({
    'Column A': ['apple', 'banana', 'cherry', 'date'],
    'Column B': [10, 20, 30, 40]
})

df2 = pd.DataFrame({
    'Column A': ['banana', 'date', 'fig'],
    'Column B': [15, 35, 50]
})

步骤1:重命名DF2的Column B

为了避免合并后列名重复,先把DF2的Column B重命名:

df2_renamed = df2.rename(columns={'Column B': 'Column B_DF2'})

步骤2:左连接两个DataFrame

使用merge方法,指定how='left'来保留DF1的所有行:

merged_df = df1.merge(
    df2_renamed[['Column A', 'Column B_DF2']],  # 只保留需要的列,提升效率
    on='Column A',
    how='left'
)

步骤3:计算差值

直接用DF1的Column B减去DF2的对应值,未匹配的行会自动返回NaN:

merged_df['B_Difference'] = merged_df['Column B'] - merged_df['Column B_DF2']

最终结果

运行后merged_df的输出如下:

Column A  Column B  Column B_DF2  B_Difference
0    apple        10           NaN           NaN
1   banana        20          15.0           5.0
2   cherry        30           NaN           NaN
3     date        40          35.0           5.0

额外注意事项

  • 精确匹配vs模糊匹配:上面的实现是精确字符串匹配,如果你的需求是模糊匹配(比如部分字符串相同),可以借助fuzzywuzzy库来计算匹配度,再筛选符合阈值的行进行合并;
  • 处理重复值:如果DF2的Column A存在重复项,建议先对DF2按Column A做聚合(比如取平均值、最大值),再进行合并,示例代码如下:
# 对DF2的Column A分组,取Column B的平均值
df2_agg = df2.groupby('Column A')['Column B'].mean().reset_index().rename(columns={'Column B': 'Column B_DF2'})
# 再合并计算差值
merged_df = df1.merge(df2_agg, on='Column A', how='left')
merged_df['B_Difference'] = merged_df['Column B'] - merged_df['Column B_DF2']
  • 大数据量优化:pandas的merge对大数据量(几百/几千行)处理效率很高,如果你有上万行数据,也可以先对Column A做排序再合并,进一步提升速度。

内容的提问来源于stack exchange,提问作者Lois Keller

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:08:13