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

如何在Pandas中按列表元素全匹配/最小匹配数筛选行?

Pandas行筛选:两种匹配条件的实现方法

示例数据

先定义示例DataFrame和目标匹配列表:

import pandas as pd

test_df = pd.DataFrame(
    [['test1', 'test2', 'test3'], 
     ['test4', 'test5', 'test6'], 
     ['test2', 'test3', 'test1'], 
     ['test1', 'test2', 'test5']], 
    columns=['col1', 'col2', 'col3']
)

test_list = ['test1', 'test2', 'test3']

一、筛选包含列表所有元素的行

要筛选出每行任意列包含test_list全部元素的行,可利用集合的issubset方法,结合apply按行判断:

# 按行检查test_list的所有元素是否都在该行中
all_match_mask = test_df.apply(lambda row: set(test_list).issubset(row), axis=1)
# 应用筛选条件
result_all = test_df[all_match_mask]

预期输出

col1    col2    col3
0  test1  test2  test3
2  test2  test3  test1

二、筛选至少包含指定数量列表元素的行

要实现每行至少包含test_list中N个元素的筛选,可按以下步骤操作:

  1. 用isin(test_list)生成布尔矩阵,标记每个单元格是否属于目标列表
  2. 按行求和,得到每行匹配的元素数量
  3. 筛选求和结果大于等于指定数量的行

以筛选至少2个匹配元素为例:

# 计算每行匹配test_list的元素数量
match_count = test_df.isin(test_list).sum(axis=1)
# 筛选数量≥2的行
result_at_least_2 = test_df[match_count >= 2]

预期输出

col1    col2    col3
0  test1  test2  test3
2  test2  test3  test1
3  test1  test2  test5

对现有代码的扩展说明

你当前通过|(逻辑或)实现了"至少1个匹配"的筛选,但这种方式无法直接扩展到N个匹配的场景。而isin+sum(axis=1)的方式,能灵活调整筛选的数量阈值(比如改成>=3也能实现全匹配,需注意行内元素无重复的情况)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 12:55:18