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

如何在Pandas中基于列表值生成互斥子集并删除指定行

Pandas 行筛选与多列条件删除问题解答

一、基于列表值筛选/删除行,创建互斥DataFrame子集

要实现基于列表值的行筛选或删除,以及生成互斥子集,核心是利用Pandas的isin()方法:

  • 筛选包含列表值的行:直接用isin()匹配目标列的元素,返回符合条件的子集
  • 删除包含列表值的行:对isin()的结果取反(~),得到不包含目标值的行
  • 生成互斥子集:将上述两个结果分别存储,两个子集无重叠且共同覆盖原DataFrame的所有行

示例代码:

import pandas as pd

target_list = ["abc1", "def"]
# 假设原DataFrame为df,以col1为匹配列
# 筛选包含目标值的行
subset_include = df[df['col1'].isin(target_list)]
# 筛选不包含目标值的行(即删除包含目标值的行)
subset_exclude = df[~df['col1'].isin(target_list)]

二、删除同时包含两个列表各至少一个元素的行(支持多列)

针对多列(100+列)的场景,我们需要判断每行是否同时存在list1和list2的元素,再过滤掉这类行:

  1. 遍历每行,检查是否有任意列包含list1的元素
  2. 同理检查是否有任意列包含list2的元素
  3. 保留不同时满足上述两个条件的行

结合你的示例实现:

import pandas as pd

list1 = ["abc1", "def"]
list2 = ["ghi", "ghj"]
df = pd.DataFrame({
    "index": [0,1,2,3,4,5,6,7,8], 
    "col1": ["abc1", "ghj", "ghi", "abc1", "","def","ghj","abc1","abc1"], 
    "col2": ["abc1", "abc1", "dfg", "dfg", "ghi","dfg","","ghj","abc1"], 
    "col3": ["abc1", "qrst", "dfg", "dfg", "dfg","dfg","abc1","ghi","abc1"]
})

# 判断每行是否包含list1的任意元素
has_list1 = df.apply(lambda row: any(val in list1 for val in row), axis=1)
# 判断每行是否包含list2的任意元素
has_list2 = df.apply(lambda row: any(val in list2 for val in row), axis=1)

# 过滤掉同时包含两个列表元素的行
filtered_df = df[~(has_list1 & has_list2)]

执行后filtered_df的结果为:

index col1 col2 col3
0      0 abc1 abc1 abc1
2      2  ghi  dfg  dfg
3      3 abc1  dfg  dfg
4      4      ghi  dfg
5      5  def  dfg  dfg
8      8 abc1 abc1 abc1

该方法通过apply(axis=1)遍历每行,自动适配任意数量的列,无需硬编码列名,适合处理100+列的数据集。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 09:45:33