根据列子集删除重复项,保留列 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 中具有最高值的行的主要内容,如果未能解决你的问题,请参考以下文章
pandas使用drop_duplicates函数基于subset参数指定的数据列子集删除重复行并设置keep参数保留重复行中的最后一个数据行