我有一个数据框,看起来像-
ID NAME AGE
1 ABC 10
2 XYZ 12
3 PQR 20
4 ABC 25
5 XYZ 30
6 PQR 20
7 KLM 22
8 NOP 16
我想根据NAME
列上的重复值重新排列并仅保留以下行-
ID NAME AGE
1 ABC 10
2 ABC 25
3 XYZ 12
4 XYZ 30
5 PQR 20
6 PQR 20
以下行已删除-
7 KLM 22
8 NOP 16
谢谢!
答案 0 :(得分:2)
请尝试
df[df.duplicated(subset=['NAME'], keep=False)].sort_values(by='NAME')
答案 1 :(得分:0)
最简单的方法是df.duplicated
解决方案,这是使用groupby
和transform
df[(df.groupby('NAME')['AGE'].transform('size')>1)].sort_values('NAME')
出于好奇心,尝试与df.duplicated
进行性能比较,两者的效果大致相同。
df=pd.concat([df]*1000000)
%timeit df1 = df[(df.groupby('NAME')['AGE'].transform('size')>1)].sort_values('NAME')
15.8 s ± 475 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
%timeit df1 = df[df.duplicated(subset=['NAME'], keep=False)].sort_values(by='NAME')
15.9 s ± 632 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)