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

如何更简洁高效地获取pandas DataFrame中符合集合匹配条件的列值?

如何更简洁高效地获取DataFrame中B列值在指定集合中的A列值?

问题背景

现有代码可实现需求,但写法繁琐,希望找到更简洁高效的实现方式:

import pandas as pd

data = {
    "A": [1, 2, 3],
    "B": [100, 200, 300]
}

s = {100, 300, 500}

df = pd.DataFrame(data)

for _, row in df.query("B in @s").iterrows():
    print(row["A"])

输出:

1
3

简洁高效的实现方案

方案1:用isin直接筛选提取(最推荐)

利用Pandas的isin方法快速匹配,直接提取目标列,避免逐行迭代:

import pandas as pd

data = {
    "A": [1, 2, 3],
    "B": [100, 200, 300]
}

s = {100, 300, 500}

df = pd.DataFrame(data)

# 筛选B列在集合中的行,提取A列
result = df[df["B"].isin(s)]["A"]

# 打印单个值(和原代码输出一致)
for val in result:
    print(val)

# 或者直接输出列表形式,无需循环
print(result.tolist())  # 输出 [1, 3]

方案2:简化query写法

如果偏好query语法,直接在查询后提取A列即可:

result = df.query("B in @s")["A"]
print(result.tolist())

方案3:用loc精准定位

loc方法可以同时指定行条件和列,代码可读性更强:

result = df.loc[df["B"].isin(s), "A"]
print(result.tolist())

效率对比

原代码用iterrows逐行迭代,在数据量大时效率极低。上述方案均采用Pandas向量式操作,基于底层优化实现,执行速度远快于逐行循环,同时代码更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 17:20:06