python 判断两列有重复数据_Python(pandas):删除基于两列的重复数据,在另一列中保持行的最大值...

你可以使用group by:

c_maxes = df.groupby(['A', 'B']).C.transform(max)

df = df[df.C == c_maxes]

c_maxes是每组中C的最大值的一系列,但长度相同且与df相同的索引.如果你没有使用.transform,那么打印c_max可能是一个好主意,看看它是如何工作的.

使用drop_duplicates的另一种方法是

df.sort('C').drop_duplicates(subset=['A', 'B'], take_last=True)

不知道哪个更有效率,但我猜是第一种方法,因为它不涉及排序.

编辑:

从pandas 0.18 up第二个解决方案将是df.sort_values(‘C’).drop_duplicates(subset = [‘A’,’B’],keep =’last’)或者替代地,df.sort_values(‘C’ ascending = False).drop_duplicates(subset = [‘A’,’B’]).无论如何,groupby解决方案似乎表现得更好:

%timeit -n 10 df[df.groupby(['A', 'B']).C.max == df.C]

10 loops, best of 3: 25.7 ms per loop

%timeit -n 10 df.sort_values('C').drop_duplicates(subset=['A', 'B'], keep='last')

10 loops, best of 3: 101 ms per loop

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值