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

在Pandas中分组聚合过滤后,如何获取对应原始数据行?

提取分组过滤后原始DataFrame的对应行

你已经完成了分组聚合并筛选出符合条件的分组(A和C),要从原始DataFrame中提取这些分组的所有行,有两种简洁的实现方式:

方法1:基于已筛选的分组列表匹配

利用你已经得到的filtered_df,提取其中保留的分组名称,再用isin()在原始DataFrame中筛选:

import pandas as pd

df = pd.DataFrame(
    {
        'a': ['A', 'A', 'B', 'B', 'B', 'C'],
        'b': [True, True, True, False, False, True]
    }
)

# 你原有的分组聚合筛选逻辑
groups = df.groupby('a')
agg_groups = groups.agg({'b':lambda x: all(x)})
agg_df = agg_groups.reset_index()
filtered_df = agg_df[agg_df["b"]]

# 提取保留的分组并筛选原始数据
keep_groups = filtered_df['a'].tolist()
result = df[df['a'].isin(keep_groups)]
print(result)

输出结果:

a      b
0  A   True
1  A   True
5  C   True

方法2:使用groupby.filter一步完成

直接通过groupby.filter()方法,省去中间的聚合和筛选步骤,更高效:

import pandas as pd

df = pd.DataFrame(
    {
        'a': ['A', 'A', 'B', 'B', 'B', 'C'],
        'b': [True, True, True, False, False, True]
    }
)

# 直接筛选出所有满足分组内b列全为True的行
result = df.groupby('a').filter(lambda x: all(x['b']))
print(result)

输出结果和方法1一致,这种方式更简洁,不需要额外处理聚合后的DataFrame。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 20:54:57