gpt4 book ai didi

python - 删除重复项,但保留具有最高值的行,包括并列

转载 作者:行者123 更新时间:2023-11-28 20:31:40 28 4
gpt4 key购买 nike

我想删除 col1 的重复值,只保存 col2 中具有最高值的行。示例 df:

df1 = pd.DataFrame({'col1': ['a', 'a', 'b', 'b', 'c'],
'col2': [5, 5, 10, 15, 20]})

我知道 df1.drop_duplicates 会去除重复值,但我如何确保保存的是最高值(如果存在与最高值并列的值,则为多个值)?

期望的输出:

dfoutput = pd.DataFrame({'col1': ['a', 'a', 'b', 'c'],
'col2': [5, 5, 15, 20]})

最佳答案

您可以使用 rank Pandas 的功能:

为组的每一行分配等级。如果值相同,则行将具有相同的排名。如下所示:

In [126]: df1['rnk'] = df1.groupby('col1')['col2'].rank()
In [127]: df1
Out[127]:
col1 col2 rnk
0 a 5 1.5
1 a 5 1.5
2 b 10 1.0
3 b 15 2.0
4 c 20 1.0

然后使用query仅过滤排名低于 2.0 的方法:

In [129]: df1.query('rnk < 2.0').drop('rnk',1)
Out[129]:
col1 col2
0 a 5
1 a 5
2 b 10
4 c 20

可以结合以上两个命令来获得单行解决方案:

In [130]: df1[df1.groupby('col1')['col2'].rank() < 2]
Out[130]:
col1 col2
0 a 5
1 a 5
2 b 10
4 c 20

关于python - 删除重复项,但保留具有最高值的行,包括并列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54001339/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com