如何用Pandas提取w_results中不在w_runnable的Item记录?
解决方案
你可以通过两种方式实现需求:
方法一:基于现有merge结果筛选
在左连接之后,筛选出右表字段(比如Type_y或Score_y)为NaN的行,然后只保留左表的原始列,最后重命名列名恢复原样:
import pandas as pd w_results = 'w_results.xlsx' w_runnable = 'w_runnable.xlsx' df_results_mylist = pd.read_excel(w_results, sheet_name='my_list') df_runnable_mylist = pd.read_excel(w_runnable, sheet_name='my_list') # 左连接,添加后缀区分左右表字段 left_join = pd.merge(df_results_mylist, df_runnable_mylist, on='Item', how='left', suffixes=('_left', '_right')) # 筛选右表字段为空的行,保留左表原始列 unmatched_records = left_join[left_join['Type_right'].isna()][['Item', 'Type_left', 'Score_left']] # 重命名列名 unmatched_records = unmatched_records.rename(columns={'Type_left': 'Type', 'Score_left': 'Score'}) print(unmatched_records)
方法二:直接用isin筛选(更简洁)
直接判断左表的Item是否不在右表的Item集合中,一步筛选出目标记录:
import pandas as pd w_results = 'w_results.xlsx' w_runnable = 'w_runnable.xlsx' df_results_mylist = pd.read_excel(w_results, sheet_name='my_list') df_runnable_mylist = pd.read_excel(w_runnable, sheet_name='my_list') # 筛选Item不在右表中的记录 unmatched_records = df_results_mylist[~df_results_mylist['Item'].isin(df_runnable_mylist['Item'])] print(unmatched_records)
两种方法最终都会输出你需要的结果:
Item Type Score 2 paper thing 24 4 lamp thing 5 5 jessica person 92 8 jacob person 83
内容的提问来源于stack exchange,提问作者tadm123
相关产品推荐
相关产品推荐

