熊猫根据所选列的重复值排列行

时间:2020-11-09 03:00:18

标签: python-3.x pandas dataframe

我有一个数据框,看起来像-

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

谢谢!

2 个答案:

答案 0 :(得分:2)

请尝试

df[df.duplicated(subset=['NAME'], keep=False)].sort_values(by='NAME')

答案 1 :(得分:0)

最简单的方法是df.duplicated解决方案,这是使用groupbytransform

的另一种解决方法
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)