如何在同一个数据框的另一列中查找包含唯一值的列值?

问题描述:

我有一个数据帧:如何在同一个数据框的另一列中查找包含唯一值的列值?

Id name value 
0 1 aaa x 
1 2 aaa y 
2 3 aaa z 
3 4 ddd t 
4 5 ddd t 
5 6 fff j 
6 7 ggg m 
7 8 ggg n 

我想找到只有那些行,其名称重复,并为这些重复行的值不同。

预期输出:

Id name value 
0 1 aaa x 
1 2 aaa y 
2 3 aaa z 
3 7 ggg m 
4 8 ggg n 

我试图用groupby

df.groupby('name') 

是这个任务此GROUPBY功能有用?我如何才能实现我想要的?

这行代码将通过名称计值的数量:

df.groupby('name')['value'].transform(pd.Series.nunique) 
Out[8]: 
0 3 
1 3 
2 3 
3 1 
4 1 
5 1 
6 2 
7 2 

请注意,我的groupby对象使用.transform(pd.Series.nunique)而不是简单地.nunique()。这样,结果将与原始数据帧长度相同,并且您可以直接使用它进行过滤:

df[df.groupby('name')['value'].transform(pd.Series.nunique) > 1] 
Out[9]: 
    Id name value 
0 1 aaa  x 
1 2 aaa  y 
2 3 aaa  z 
6 7 ggg  m 
7 8 ggg  n 
+0

正确。谢谢。 – kit