保留另一列中最高值的行,删除重复行

16
a = [['John', 'Mary', 'John'], [10,22,50]]
df1 = pd.DataFrame(a, columns=['Name', 'Count'])
给定一个像这样的数据框,我想要比较所有相似的“Name”字符串值与“Count”值,以确定最高值。我不确定如何在Python的数据框中做到这一点。例如,在上面的情况下,答案将是: Mary 22 和 John 50。已经删除了较低的John 10(我只想看到基于“Name”相同值的“Count”的最高值)。在SQL中,它会像一个选择案例查询一样(在其中我选择Name == Name&Count> Count的情况来递归地确定最高数字)。或者为每个名称使用For循环,但据我所知,由于DataFrame对象的性质,循环在DataFrame中是一个不好的想法。有没有办法在Python的数据框中做到这一点?我可以创建一个新的数据框,其中包含每个变量(只有John一个,然后获取最高值(df.value()[:1]或类似的值)。但由于我有许多数百个唯一的条目,因此这似乎是一个可怕的解决方案。 :D

1
你应该修正你的样例输入,不过我猜你想要 df.groupby('Name').Count.max() - miradulo
让我试着修复它,Count.max 在这里无法帮助我... 我会再试一次。 - Kafka
1个回答

17

要么使用 sort_valuesdrop_duplicates

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

   Name  Count
1  Mary     22
2  John     50

或者,就像miradulo所说的那样,使用groupbymax

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

   Name  Count
0  John     50
1  Mary     22

完美,我已经对较大的数据集进行了测试,看起来#1是有效的。 - Kafka
@Kafka 只是好奇,你为什么认为groupby和Count.max无法帮助? - cs95
可能是我提供的样本有误。在我的数据集中,我有7列,但大部分值对于这个任务来说都是无关紧要的,所以我把重点放在了需要查看的数据类型上。当我运行Count.max时,在列计数上收到一个断言错误。然而,经过检查我的代码后,我发现我在列值上犯了一个愚蠢的错误。在清理后,Count.max正常工作了。 - Kafka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接