如何基于另一个DataFrame筛选原DataFrame的记录
如何基于另一个DataFrame筛选原DataFrame的记录
嗨,这个需求其实很常见,用Pandas的内置方法就能轻松搞定,我给你两种实用的方案,你可以根据自己的场景选择:
方法一:用isin()直接筛选(最简洁直观)
这是处理这类筛选需求最常用的方式,核心思路是先提取dE里的RepID列表,然后用它来过滤df:
首先确保你已经导入Pandas,然后加载两个CSV文件:
import pandas as pd # 加载主数据和匹配用的DataFrame df = pd.read_csv('你的第一个csv文件路径.csv') dE = pd.read_csv('你的第二个csv文件路径.csv')
生成dY(RepID存在于dE的记录)
直接用isin()判断df的RepID是否在dE的RepID列中:
dY = df[df['RepID'].isin(dE['RepID'])]
生成dX(RepID不存在于dE的记录)
在isin()前面加~符号取反,就能得到不在匹配列表里的记录:
dX = df[~df['RepID'].isin(dE['RepID'])]
如果dE里有重复的RepID,先去重会让筛选更高效:
# 先提取dE中唯一的RepID unique_rep_ids = dE['RepID'].unique() dY = df[df['RepID'].isin(unique_rep_ids)] dX = df[~df['RepID'].isin(unique_rep_ids)]
方法二:用merge()关联后筛选(适合需要更多关联信息的场景)
如果你需要后续对两个DataFrame的关联做更多操作,用merge的方式会更灵活:
# 用左连接关联两个DataFrame,添加_merge列标记关联状态 merged_df = df.merge(dE, on='RepID', how='left', indicator=True) # _merge值为'both'表示RepID同时存在于两个DataFrame,对应dY dY = merged_df[merged_df['_merge'] == 'both'].drop('_merge', axis=1) # _merge值为'left_only'表示RepID只存在于df,对应dX dX = merged_df[merged_df['_merge'] == 'left_only'].drop('_merge', axis=1)
两种方法都能实现你的需求,isin()更简洁高效,merge()则在需要扩展操作时更方便~
备注:内容来源于stack exchange,提问作者asmgx
相关产品推荐
相关产品推荐

