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

如何从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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:36:03