根据列子集删除重复项,保留列 E 中具有最高值的行,如果 E 中的值相等,则列 B 中具有最高值的行

Posted

技术标签:

【中文标题】根据列子集删除重复项,保留列 E 中具有最高值的行,如果 E 中的值相等,则列 B 中具有最高值的行【英文标题】:Drop duplicates based on subset of columns keeping the rows with highest value in col E & if values equal in E the rows with highest value in col B 【发布时间】:2021-08-28 10:50:20 【问题描述】:

假设我有以下数据框:

A B C D E
3 2 1 4 5
3 2 1 2 3
4 5 6 7 8
4 5 6 9 8
9 3 8 5 4

我想根据 A、B 和 C 列删除重复项,保留 E 列最高的行。如果 E 列中的值相同,则保留 D 列最高的行。

所以上面的数据框会变成:

A B C D E
3 2 1 4 5
4 5 6 9 8
9 3 8 5 4

我在那里看到了答案的开头:python pandas: Remove duplicates by columns A, keeping the row with the highest value in column B 但不幸的是,如果 E 列中的值相同,那么我不知道如何处理,然后保持 D 列中的最高值:/

(我在一个相当大的数据集上运行此代码)

任何帮助表示赞赏!

【问题讨论】:

如果速度够快,可以先对帧进行排序:df.sort_values(["E", "D"], ascending=[False, False]).drop_duplicates(subset=list("ABC"))。但是像往常一样可能会有更好的解决方案。 谢谢,它奏效了(而且非常快) 哦,太好了!你介意我把它作为答案发布吗? 没问题,去吧:) 【参考方案1】:

您可以先根据E, D 标准以降序对帧进行排序,然后删除重复项:

df.sort_values(["E", "D"], ascending=[False, False]).drop_duplicates(subset=list("ABC"))

【讨论】:

以上是关于根据列子集删除重复项,保留列 E 中具有最高值的行,如果 E 中的值相等,则列 B 中具有最高值的行的主要内容,如果未能解决你的问题,请参考以下文章

根据不同列中的值删除重复项

根据条件从 r 中的多列中删除重复的行

怎么样删除excel表中的所有重复的数据,不保留初始数据

在根据最大列值理解行的同时查找具有最高值的行的列名

如何在django中删除具有重复列的行

pandas使用drop_duplicates函数基于subset参数指定的数据列子集删除重复行并设置keep参数保留重复行中的最后一个数据行