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

多列连接两个数据集并标记不匹配列的实现方法

实现方法(基于Pandas)

完全可以实现你的需求,以下是具体步骤:

1. 构建数据集

先把你提供的两个数据集转换成Pandas DataFrame:

import pandas as pd
import numpy as np

df_1 = pd.DataFrame({
    'my_id': ['ABC111', 'ABC113', 'ADC110', 'ABC145', 'ACC122'],
    'col_1': [np.nan, 456, 757, 366, np.nan],
    'col_2': [289, 279, 289, 299, 289],
    'value': [374578, 335368, 374568, 374578, 374220]
})

df_2 = pd.DataFrame({
    'my_id': ['ABC000', 'ABC113', 'ADC110', 'ABC145', 'ACC122', 'ACC999'],
    'col_1': [np.nan, 456, 757, 366, np.nan, np.nan],
    'col_2': [289, 279, np.nan, 299, 289, 289],
    'value_new': [374578, 330008, 374568, 374578, 374229, 374229]
})

2. 添加列存在性检查

针对df_2的每个字段,判断其值是否存在于df_1的对应列中(注意处理空值np.nan的特殊情况,因为np.nan不等于任何值包括自身,需要单独判断):

# 检查my_id是否在df_1的my_id列中
df_2['my_id_check'] = np.where(df_2['my_id'].isin(df_1['my_id']), 'Yes', 'No')

# 检查col_1:空值需判断df_1的col_1是否包含空值,非空值直接检查存在性
df1_col1_has_null = df_1['col_1'].isna().any()
df_2['col_1_check'] = np.where(
    df_2['col_1'].isna(),
    'Yes' if df1_col1_has_null else 'No',
    np.where(df_2['col_1'].isin(df_1['col_1'].dropna()), 'Yes', 'No')
)

# 检查col_2:逻辑同col_1
df1_col2_has_null = df_1['col_2'].isna().any()
df_2['col_2_check'] = np.where(
    df_2['col_2'].isna(),
    'Yes' if df1_col2_has_null else 'No',
    np.where(df_2['col_2'].isin(df_1['col_2'].dropna()), 'Yes', 'No')
)

# 检查value_new是否在df_1的value列中
df_2['val_check'] = np.where(df_2['value_new'].isin(df_1['value']), 'Yes', 'No')

3. 最终结果

执行代码后,df_2会生成你需要的格式:

my_id  col_1  col_2  value_new my_id_check col_1_check col_2_check val_check
0  ABC000    NaN  289.0     374578          No         Yes         Yes       Yes
1  ABC113  456.0  279.0     330008         Yes         Yes         Yes        No
2  ADC110  757.0    NaN     374568         Yes         Yes          No       Yes
3  ABC145  366.0  299.0     374578         Yes         Yes         Yes       Yes
4  ACC122    NaN  289.0     374229         Yes         Yes         Yes        No
5  ACC999    NaN  289.0     374229          No         Yes         Yes        No

注:你提供的期望输出中,ACC122行的col_1_check和col_2_check标记为No,这与实际逻辑不符——df_1的col_1包含空值、col_2包含289,所以这两个检查应该为Yes,推测是笔误。如果你的需求是基于相同my_id匹配行后对比列值,可以调整代码逻辑,比如先按my_id合并两个DataFrame,再逐列对比。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 05:05:31