如何判断一个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的用户理解。
两种方法最终都会输出如下结果:
| Name | Value | Status |
|---|---|---|
| Mike | A | FOUND |
| Mike | G | NOT FOUND |
| Karen | JK | FOUND |
| Karen | B | NOT FOUND |
| John | D | FOUND |
| John | H | FOUND |
内容的提问来源于stack exchange,提问作者TheDataPanda
相关产品推荐
相关产品推荐

