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

如何从Pandas DataFrame中筛选指定列后再过滤行?

解决Pandas筛选指定列+条件行的问题

嘿,我明白你现在的困扰啦——你之前用for col in df.loc[:, ["B", "D"]]的方式其实是在遍历列名,而不是逐行处理,这当然没法在if语句里筛选目标行。Pandas的核心优势是矢量化操作,咱们完全不用写循环就能高效完成“选列+筛行”的需求,具体方法如下:

核心思路:先定条件,再精准提取

Pandas的loc方法可以同时完成行筛选和列选择,一步到位;或者你也可以分两步先选列再筛行,两种方式都很简单。

示例场景

先假设咱们有这样一个测试DataFrame:

import pandas as pd

data = {
    "A": [1, 2, 3, 4, 5],
    "B": [12, 8, 25, 18, 5],
    "C": [100, 200, 300, 400, 500],
    "D": [7, 14, 21, 28, 35]
}
df = pd.DataFrame(data)

方法1:一步到位(推荐,更高效)

直接用loc,第一个参数是行筛选的布尔条件,第二个参数是要保留的列名列表:

# 比如筛选B列值大于10,且只保留B、D列的行
filtered_df = df.loc[df["B"] > 10, ["B", "D"]]

如果需要多个条件(比如B>10 且 D>20),记得用&连接,并且每个条件要加括号:

filtered_df = df.loc[(df["B"] > 10) & (df["D"] > 20), ["B", "D"]]

方法2:分两步操作(更直观)

先提取出B、D列,再对这个子DataFrame应用筛选条件:

# 第一步:提取B、D列
selected_cols = df[["B", "D"]]
# 第二步:筛选符合条件的行(比如B列小于10)
filtered_df = selected_cols[selected_cols["B"] < 10]

为什么不用for循环?

Pandas的循环遍历行/列效率极低,尤其是数据量大的时候——矢量化操作是Pandas底层用C实现的,速度比Python循环快几十甚至上百倍,代码也更简洁易读。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:11:20