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

如何在pandas中筛选与指定列表匹配指定次数的DataFrame行

pandas 按行统计与指定列表匹配次数并筛选目标行

核心逻辑不需要逐列写判断条件,借助pandas内置的isin方法可以批量完成元素匹配判断,按行求和即可得到每行的匹配次数,支持0次到全量匹配的所有筛选场景。

完整实现代码

import pandas as pd
import numpy as np

# 待匹配校验列表
check = [4,5,6,8,9]

# 生成符合场景的测试DataFrame:从0-9不重复数字中采样5次,每次抽5个值排序
np.random.seed(42) # 固定随机种子方便结果复现,实际使用可删除
rows = []
for _ in range(5):
    sample = sorted(np.random.choice(range(10), size=5, replace=False))
    rows.append(sample)
df = pd.DataFrame(rows, columns=["Num1", "Num2", "Num3", "Num4", "Num5"])

# 核心计算:新增列存储每行和check列表的匹配次数
# isin生成布尔矩阵,True代表元素在check中,按行求和时True计为1、False计为0
df["match_count"] = df.isin(check).sum(axis=1)

各场景筛选方式

直接通过match_count列做等值筛选即可,覆盖所有匹配次数需求:

  • 无任何匹配(匹配0次):df[df["match_count"] == 0]
  • 仅匹配1次:df[df["match_count"] == 1]
  • 仅匹配2次:df[df["match_count"] == 2]
  • 仅匹配3次:df[df["match_count"] == 3]
  • 仅匹配4次:df[df["match_count"] == 4]
  • 全部值匹配(匹配5次):df[df["match_count"] == 5]

说明:该统计逻辑不依赖列值排序,只要是DataFrame元素和目标列表的精确匹配都可以正确计数。如果不需要保留匹配次数字段,筛选完成后调用.drop(columns=["match_count"])即可删除该列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 19:24:22