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

基于特定条件从Pandas DataFrame中提取指定分组

高效提取包含指定条件行的X/Y分组数据

针对你的需求,完全可以用Pandas的向量化操作替代低效的逐行迭代,以下两种方法都能高效实现目标:

方法一:使用groupby.filter(最直观)

利用groupby.filter直接对每个X/Y分组做判断,保留存在至少一行满足Name='J'且Age=33的分组的所有行:

import pandas as pd

df = pd.DataFrame({
    'X': [1,1,1,1,2,2,2,2],
    'Y': [3,3,4,4,3,3,4,4],
    'Name': ['J', 'A', 'B', 'X', 'V', 'P', 'J', 'V'],
    'Age': [33,47,53,22,33,80,33,93]
})

# 筛选符合条件的分组
filtered_df = df.groupby(['X', 'Y']).filter(
    lambda group: ((group['Name'] == 'J') & (group['Age'] == 33)).any()
)

print(filtered_df)

运行结果:

X  Y Name  Age
0  1  3    J   33
1  1  3    A   47
4  2  3    V   33
5  2  3    P   80

方法二:先提取目标分组再合并(性能更优)

先定位所有满足条件的X/Y唯一组合,再通过合并筛选出这些分组的所有行,数据量较大时这个方法性能表现更好:

# 第一步:获取所有符合条件的X,Y唯一组合
target_groups = df[(df['Name'] == 'J') & (df['Age'] == 33)][['X', 'Y']].drop_duplicates()

# 第二步:筛选属于目标分组的所有行
filtered_df = df.merge(target_groups, on=['X', 'Y'])

print(filtered_df)

得到的结果和方法一完全一致。

效率对比说明

逐行迭代(比如iterrows())是纯Python层面的循环,效率极低;而上述两种方法都是基于Pandas底层的向量化操作(C语言实现),计算速度会提升数倍甚至数十倍,尤其当数据量达到十万级以上时,差距会非常明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 13:12:35