python - 使用 Pandas 过滤列中具有唯一值的行

我有一个 df :

id      value
1       10
2       15
1       10
1       10
2       13
3       10
3       20

我试图只保留在列 value 中具有 1 个唯一值的行这样结果df看起来像这样:

id      value
1       10
1       10
1       10

我放弃了 id = 2, 3因为它在 value 列中有超过 1 个唯一值, 15, 13 & 10, 20分别。

I read this answer. 但这只是删除重复项,而我想检查给定的列 - 在本例中为列 value具有超过 1 个唯一值。

我试过:

df['uniques'] = pd.Series(df.groupby('id')['value'].nunique())

但这会返回 nan对于每一行,因为我试图适应 n返回 n+m分组后的行。我可以编写一个函数并将其应用于每一行,但我想知道是否有一个智能快速过滤器可以实现我的目标。

最佳答案

使用 transform 和 groupby 将组值与各个行对齐:

df['nuniques'] = df.groupby('id')['value'].transform('nunique')

输出:

   id  value  nuniques
0   1     10         1
1   2     15         2
2   1     10         1
3   1     10         1
4   2     13         2
5   3     10         2
6   3     20         2

如果您只需要过滤数据,则不需要分配新列:

df[df.groupby('id')['value'].transform('nunique') == 1]

https://stackoverflow.com/questions/70423948/

相关文章:

reactjs - 如何在 React 中使用 map 输出嵌套对象的内容?

python - 从云函数内部构建容器镜像

javascript - Typescript reducer 的 switch case type

fortran - gfortran 与 MKL 的链接导致 'Intel MKL ERROR: P

c++ - sfinae 与非类型模板参数的概念

python - pandas 的过滤功能 - 在列中查看 NaN 值

ios - FaSTLane Match 环境变量未被 build_app 获取

ruby-on-rails - 无法使用 octokit 连接到 Github 帐户

pytorch - Pytorch 中软标签的交叉熵

angular - Auth0 Angular error during unit test : U