在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
相关产品推荐
相关产品推荐

