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

如何筛选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.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:08:18