如何在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
相关产品推荐
相关产品推荐

