我有一个 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/