为了账号安全,请及时绑定邮箱和手机立即绑定

python pandas:删除列A的重复项,将行的最高值保留在列B中

python pandas:删除列A的重复项,将行的最高值保留在列B中

慕标5832272 2019-11-06 10:21:55
我在A列中有一个具有重复值的数据框。我想删除重复项,将行的最高值保留在B列中。所以这:A B1 101 202 302 403 10应该变成这样:A B1 202 403 10Wes添加了一些不错的功能来删除重复项:http ://wesmckinney.com/blog/?p=340 。但是AFAICT是为精确重复而设计的,因此没有提及选择保留哪些行的标准。我猜想可能有一个简单的方法可以做到这一点-可能就像在删除重复项之前对数据帧进行排序一样简单-,但是我不知道groupby的内部逻辑足以弄清楚它。有什么建议么?
查看完整描述

3 回答

?
红糖糍粑

TA贡献1815条经验 获得超6个赞

这需要最后一个。虽然不是最大:


In [10]: df.drop_duplicates(subset='A', keep="last")

Out[10]: 

   A   B

1  1  20

3  2  40

4  3  10

您还可以执行以下操作:


In [12]: df.groupby('A', group_keys=False).apply(lambda x: x.loc[x.B.idxmax()])

Out[12]: 

   A   B

A       

1  1  20

2  2  40

3  3  10


查看完整回答
反对 回复 2019-11-06
?
BIG阳

TA贡献1859条经验 获得超6个赞

首要的答案是做太多的工作,对于较大的数据集来说看起来很慢。apply速度慢,应尽可能避免。ix已弃用,也应避免使用。


df.sort_values('B', ascending=False).drop_duplicates('A').sort_index()


   A   B

1  1  20

3  2  40

4  3  10

或简单地按所有其他列分组并获取所需的最大列数。 df.groupby('A', as_index=False).max()


查看完整回答
反对 回复 2019-11-06
?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

这是我必须解决的一个变体,值得分享:对于其中的每个唯一字符串,columnA我想在中找到最常见的关联字符串columnB。


df.groupby('columnA').agg({'columnB': lambda x: x.mode().any()}).reset_index()


在.any()是否有对应的模式领带挑选一个。(请注意,.any()在一系列上使用会int返回布尔值,而不是选择其中一个。)


对于原始问题,相应的方法简化为


df.groupby('columnA').columnB.agg('max').reset_index()。


查看完整回答
反对 回复 2019-11-06
  • 3 回答
  • 0 关注
  • 1444 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信