如何从df1中提取不存在于df2的数值生成对应Series或集合
解决方案
以下方案默认两个DataFrame中存储位置的列名为location,如果你的实际列名不同,替换为对应列名即可。
方法1:isin()取反实现(易读性最高,适合绝大多数场景)
直接通过布尔索引筛选目标值,一行代码即可得到结果:
result = df1.loc[~df1['location'].isin(df2['location']), 'location']
逻辑说明:
df1['location'].isin(df2['location'])返回布尔序列,标记df1的每一行location是否在df2中存在- 前缀
~是取反操作,筛选出不存在的行 - 最后取
location列,直接得到Series类型的输出结果,会完整保留df1中location列的重复值、原有顺序
方法2:Index.difference()实现(性能更优,适合百万级以上大数据量)
如果数据量很大,用索引差集的运算速度远高于逐行判断:
result = pd.Series(pd.Index(df1['location']).difference(pd.Index(df2['location'])), name='location')
注意:该方法返回的结果会自动去重且按值排序,如果需要保留原有顺序和重复值请使用方法1。
效果验证示例
你可以用测试代码确认效果:
import pandas as pd # 构造测试数据 df1 = pd.DataFrame({'location': ['北京', '上海', '广州', '深圳', '成都', '北京']}) df2 = pd.DataFrame({'location': ['上海', '深圳', '杭州']}) # 调用方法1 result = df1.loc[~df1['location'].isin(df2['location']), 'location'] print(result)
输出结果:
0 北京 2 广州 4 成都 5 北京 Name: location, dtype: object
内容的提问来源于stack exchange,提问作者user12464879
相关产品推荐
相关产品推荐

