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

如何用Pandas中DataFrame列的唯一值数组过滤另一个DataFrame?

问题

我想使用X.ColumnA.unique()得到的数组值来过滤另一个DataFrame,之前是手动指定多个值用或运算过滤,现在需要用这个数组的全部值完成过滤,该怎么实现?

原有手动过滤代码

Y = ((df['ColumnnA'] == "22.33.44.55")
| (df['ColumnnA'] == "12.12.32.44") 
| (df['ColumnnA'] == "45.142.22.22") 
| (df['ColumnnA'] == "55.197.55.8") 
| (df['ColumnnA'] == "44.44.211.254") 
| (df['ColumnnA'] == "33.44.234.83") 
| (df['ColumnnA'] == "33.33.221.240") 
| (df['ColumnnA'] == "33.33.33.1"))
restdataframe = df[~Y]
Y=df[Y]

X.ColumnA.unique()得到的数组

X.ColumnA.unique()
array(['0', '222.33.222.106', '12.12.32.44', '122.122.1.1',
       '122.222.180.150', '142.222.180.142', '222.99.222.78',
       '33.33.221.240', '151.99.222.76', '222.251.222.1',
       '222.250.184.46', '22.33.44.55', ........ ]

目标DataFrame示例

df.head(5).to_dict()
{'Column0': {0: 0.00192, 1: 0.0, 2: 0.834324, 3: 8.588816, 4: 2.908711},
 'Column1': {0: '0',
  1: '192.168.1.1',
  2: '22.22.2.15',
  3: '10.22.2.15',
  4: '10.22.22.15'},
 'ColumnA': {0: '0',
  1: '10.0.2.22',
  2: '20.55.22.22',
  3: '22.44.1.1',
  4: '44.33.1.1'},
 'Column2': {0: 'yyy', 1: 'xxx', 2: 'zzz', 3: 'xxx', 4: 'yyy'},
 'Column3': {0: '88', 1: '88', 2: '777', 3: '666', 4: '555'},
 'Column4': {0: '0', 1: '111', 2: '222', 3: '333', 4: '444'},
 'Column5': {0: 0, 1: 1, 2: 17, 3: 8, 4: 4},
 'Column6': {0: 0, 1: 1, 2: 7, 3: 4, 4: 2},
 'Column7': {0: 0, 1: 0, 2: 10, 3: 4, 4: 2},
 'Column8': {0: 0, 1: 110, 2: 5798, 3: 504, 4: 408},
 'Column9': {0: 0, 1: 110, 2: 775, 3: 264, 4: 188},
 'Column10': {0: 0, 1: 0, 2: 5023, 3: 240, 4: 220},
 'Column11': {0: 0, 1: 0, 2: 0, 3: 3, 4: 0},
 'Column12': {0: 'DDD', 1: 'EEE', 2: 'AAA', 3: 'BBB', 4: 'CCC'}}

解决方案

直接用Pandas的isin()方法就能实现,代码简洁且能自动适配目标数组的所有值:

# 获取需要匹配的数组
target_values = X.ColumnA.unique()
# 生成过滤条件:ColumnA是否在目标数组中
mask = df['ColumnA'].isin(target_values)
# 分离出匹配和不匹配的DataFrame
Y = df[mask]
restdataframe = df[~mask]

说明

  • isin()会检查列中每个元素是否存在于传入的数组/列表中,返回布尔Series,完全替代原来手动拼接的多个==或运算。
  • 注意原代码中列名写错:ColumnnA应为ColumnA,需和目标DataFrame列名保持一致,否则会报错。
  • 这种方式无论目标数组有多少值,都能一次性处理,无需修改代码,扩展性更强。

内容的提问来源于stack exchange,提问作者linuxpanther

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 16:48:57