我有一个数据框,例如:
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)
感谢您的帮助。
答案 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_values
和DataFrame.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