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

如何用Pandas检查不匹配记录并生成Match标记列?

Pandas实现集装箱号关联下的金额匹配逻辑

嘿,这个需求其实很适合用Pandas的合并操作+条件判断来实现,我帮你拆解成具体步骤,结合你给的示例数据来演示:

步骤1:导入依赖并创建示例数据

先把基础的环境和测试数据准备好:

import pandas as pd

# 创建示例df1
df1 = pd.DataFrame({'Cntr_No': ['HLBU 1234567'], 'Total_Amount': [100]})
# 创建示例df2
df2 = pd.DataFrame({'Cntr_No': ['HLBU 1234567'], 'Total_Amount': [50], 'Amount_2': [40], 'Amount_3': [100]})

步骤2:按集装箱号合并两个DataFrame

我们需要把两个表通过Cntr_No关联起来,这样才能逐行比对金额:

# 按Cntr_No进行内连接(只保留两边都有的集装箱号)
merged_df = pd.merge(df1, df2, on='Cntr_No', suffixes=('_df1', '_df2'))

这里用suffixes是为了区分两个表中同名的Total_Amount字段,避免字段名冲突。

步骤3:编写匹配逻辑生成Match列

接下来就是核心的条件判断了:

  • 首先判断df1的Total_Amount是否等于df2的Total_Amount
  • 如果不等,再检查是否等于df2的Amount_2或者Amount_3
  • 满足任一条件就标记为"Yes",否则为"No"

这里推荐用numpy.where实现,相比apply效率更高(尤其是大数据量场景):

import numpy as np

# 构建匹配条件:满足任一规则即匹配成功
match_condition = (merged_df['Total_Amount_df1'] == merged_df['Total_Amount_df2']) | \
                  (merged_df['Total_Amount_df1'] == merged_df['Amount_2']) | \
                  (merged_df['Total_Amount_df1'] == merged_df['Amount_3'])

# 生成Match列
merged_df['Match'] = np.where(match_condition, 'Yes', 'No')

步骤4:查看最终结果

执行完上面的代码后,merged_df的输出结果为:

Cntr_No  Total_Amount_df1  Total_Amount_df2  Amount_2  Amount_3 Match
0  HLBU 1234567               100                50        40       100   Yes

完全符合你的需求——df1的100虽然不等于df2的Total_Amount(50),但匹配上了df2的Amount_3,所以标记为"Yes"。

额外优化(可选)

如果需要保留df1的原始结构,最后可以把Match列合并回df1:

df1 = df1.merge(merged_df[['Cntr_No', 'Match']], on='Cntr_No', how='left')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:03:25