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

如何在Pandas中筛选包含指定值的行并生成新DataFrame?

筛选同时包含指定值的行(Pandas)

嘿,针对你需要筛选同时包含8和25的行(不管这俩值出现在哪一列)的需求,我整理了两种实用方法,都能轻松搞定你的数千行数据集:

方法一:高效集合检查(推荐)

这种方法用集合判断子集的方式,效率更高,还能自动避开非数值列(比如你的id列):

import pandas as pd

# 定义要找的两个目标值
targets = {8, 25}

# 先筛选出所有数值类型的列(避免检查id这类字符串列)
numeric_cols = df.select_dtypes(include=['number']).columns

# 生成布尔掩码:每行检查是否同时包含两个目标值
mask = df[numeric_cols].apply(lambda row: targets.issubset(row.values), axis=1)

# 生成新DataFrame,用copy()避免后续的警告问题
filtered_df = df[mask].copy()

为啥推荐这个?

  • 集合的issubset判断比两次单独检查更快,尤其数据量大的时候
  • select_dtypes自动过滤非数值列,不用手动列出来,更灵活
  • 最后用.copy()是为了防止后续修改时触发SettingWithCopyWarning,养成好习惯

方法二:直观逐值检查(适合理解逻辑)

如果你想更直白地写出判断逻辑,也可以分开检查每个值是否存在,再取逻辑与:

# 分别检查每行是否包含8和25,然后取两者的交集
has_8 = df.apply(lambda row: 8 in row.values, axis=1)
has_25 = df.apply(lambda row: 25 in row.values, axis=1)
mask = has_8 & has_25

filtered_df = df[mask].copy()

针对你的示例数据的结果

运行后,filtered_df会包含行a和c:

id num1 num2 num3 num4 num5 num6
a 43 25 37 8 36 20
c 43 25 23 38 1 8

小提示

  • 如果你的数据里有缺失值(NaN),不用担心,in或者issubset会自动忽略NaN,不会影响判断
  • 要是你想检查所有列(包括非数值列),直接把df[numeric_cols]改成df就行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:40:16