首页 > 解决方案 > 删除重复项,将具有最高值的行保留在另一列中

问题描述

a = [['John', 'Mary', 'John'], [10,22,50]])
df1 = pd.DataFrame(a, columns=['Name', 'Count'])

给定这样的数据框,我想将“Name”的所有相似字符串值与“Count”值进行比较以确定最高值。我不确定如何在 Python 的数据框中执行此操作。

例如:在上述情况下,答案将是:

较低的值 John 10 已被删除(我只想查看基于“名称”相同值的“计数”的最高值)。

在 SQL 中,它类似于 Select Case 查询(其中我选择 Case where Name == Name & Count > Count 递归地确定最大数字。或者每个名称的 For 循环,但据我所知,DataFrames 中的循环是由于对象的性质,这是个坏主意。

有没有办法在 Python 中使用 DF 来做到这一点?我可以为每个变量创建一个新的数据框(一个只有 John 的数据框,然后获得最高值(df.value()[:1] 或类似的)。但由于我有数百个独特的条目,这似乎是一个糟糕的解决方案。 :D

标签: pythonpandas

解决方案


和, sort_values_drop_duplicates

df1.sort_values('Count').drop_duplicates('Name', keep='last')

   Name  Count
1  Mary     22
2  John     50

或者,就像 miradulo 所说,groupby并且max.

df1.groupby('Name')['Count'].max().reset_index()

   Name  Count
0  John     50
1  Mary     22

推荐阅读