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

如何判断一个DataFrame的每条记录值是否存在于另一个DataFrame中

判断DataFrame记录值是否存在于另一个DataFrame的解决方法

先构造示例数据

先把你描述的场景转换成可运行的pandas DataFrame:

import pandas as pd

# 待检查的DF1
df1 = pd.DataFrame({
    'Name': ['Mike', 'Mike', 'Karen', 'Karen', 'John', 'John'],
    'Value': ['A', 'G', 'JK', 'B', 'D', 'H']
})

# 存储有效值的DF2
df2 = pd.DataFrame({
    'Name': ['Mike', 'Karen', 'John', 'John'],
    'Value': ['A', 'JK', 'D', 'H']
})

方法一:用字典+apply快速查找

把DF2转换成以Name为键、对应Value集合为值的字典,逐行检查DF1的Value是否在对应集合中:

# 构建Name到Value集合的映射字典
name_value_set = df2.groupby('Name')['Value'].apply(set).to_dict()

# 给DF1添加状态标记列
df1['Status'] = df1.apply(
    lambda row: 'FOUND' if row['Value'] in name_value_set.get(row['Name'], set()) else 'NOT FOUND',
    axis=1
)

这种方法查找效率高,适合数据量较大的场景。

方法二:用merge左连接判断

通过左连接两个DataFrame,根据连接结果判断是否匹配:

# 左连接两个DF,匹配条件为Name和Value
merged_df = df1.merge(df2, on=['Name', 'Value'], how='left', indicator=True)

# 根据连接结果映射状态
merged_df['Status'] = merged_df['_merge'].replace({'both': 'FOUND', 'left_only': 'NOT FOUND'})

# 保留需要的列
result_df = merged_df[['Name', 'Value', 'Status']]

这种方法逻辑更直观,适合刚接触pandas的用户理解。

两种方法最终都会输出如下结果:

NameValueStatus
MikeAFOUND
MikeGNOT FOUND
KarenJKFOUND
KarenBNOT FOUND
JohnDFOUND
JohnHFOUND

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 09:27:40