如何筛选Pandas分组DataFrame中值全部相同的分组?
解决Pandas分组筛选:保留组内所有value3值相同的分组
嘿,我来帮你搞定这个问题!你想要筛选出group分组中所有value3值完全一致的组,咱们先看看你尝试的代码哪里有问题,再给出正确的实现方式。
问题分析
你原来的代码:
df.groupby('group').filter(lambda x: x.value3 == x.value3.mean())
这里存在两个核心问题:
- 这个lambda表达式返回的是一个布尔Series(每个元素和组内均值比较的结果),而
filter需要的是单个布尔值来判断整个组是否保留 - 就算组内有不同的值,只要某个值刚好等于均值,也会被错误匹配,完全不符合“组内所有值相同”的需求
正确实现方法
方法1:用nunique()统计唯一值数量
我们可以检查每个组内value3的唯一值数量是否为1,这样就能确保组内所有值都相同:
import pandas as pd # 可复现数据 df = pd.DataFrame({'group':['A', 'A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'], 'value3':[24, 45, 34, 55, 44, 33, 1, 2, 3, 98, 98, 98]}) # 筛选组内value3全部相同的分组 filtered_df = df.groupby('group').filter(lambda x: x['value3'].nunique() == 1) print(filtered_df)
运行后输出:
group value3 9 C 98 10 C 98 11 C 98
方法2:用all()检查所有值等于组内第一个元素
另一种思路是取组内第一个value3值,然后验证组内所有元素都等于这个值:
filtered_df = df.groupby('group').filter(lambda x: (x['value3'] == x['value3'].iloc[0]).all())
这个方法和方法1效果完全一致,你可以根据自己的习惯选择使用。
内容的提问来源于stack exchange,提问作者Matt W.
相关产品推荐
相关产品推荐

