仅在使用熊猫的组中获得重复的值

时间:2019-03-12 15:35:32

标签: python pandas

我有一个数据框,例如:

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)

感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

没有必要使用功能groupby,为获得更好的性能,请对多列使用DataFrame.duplicated,并使用参数keep=False获取所有重复项,然后按boolean indexing进行过滤:

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

如果需要排序,请添加DataFrame.sort_valuesDataFrame.reset_index作为默认索引:

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

答案 1 :(得分:1)

您可以使用:

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