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