只在有pandas的组中获取重复的值

2024-07-05 11:52:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据框,例如:

groups  ids numbers
group3  id4 89
group1  id1 50
group1  id1 30
group1  id2 90
group2  id4 89
group2  id6 76
group3  id4 90

它的思想是用groupby分组找到重复的id,并通过分组得到只包含重复id的新数据帧,例如:

group1  id1 50
group1  id1 30
group3  id4 89
group3  id4 90

我试过:

for groups in df.groupby('groups'):
 print(df['ids'].duplicated)

谢谢你的帮助


Tags: 数据ididsdf思想groupsid2groupby
2条回答

函数groupby不是必需的,为了获得更好的性能,使用^{}by multiple columns和参数keep=False获取所有重复,然后按^{}过滤:

df = df[df.duplicated(['groups','ids'], keep=False)]
print (df)
   groups  ids  numbers
0  group3  id4       89
1  group1  id1       50
2  group1  id1       30
6  group3  id4       90

如果需要排序,添加^{}^{}作为默认索引:

df = (df[df.duplicated(['groups','ids'], keep=False)]
         .sort_values(['groups','ids'])
         .reset_index(drop=True))
print (df)
   groups  ids  numbers
0  group1  id1       50
1  group1  id1       30
2  group3  id4       89
3  group3  id4       90

您可以使用:

df.groupby('groups').apply(lambda x: \
            x[x.duplicated('ids',keep=False)]).reset_index(drop=True)

输出:

   groups  ids  numbers
0  group1  id1       50
1  group1  id1       30
2  group3  id4       89
3  group3  id4       90

相关问题 更多 >