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

时间:2016-09-14 11:59:26

标签: python pandas dataframe

我有一个数据框:

  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函数对此任务有用吗?我怎么能达到我想要的呢?

1 个答案:

答案 0 :(得分:1)

这行代码将按名称计算值的数量:

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

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

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