python - 删除重复项,将具有最高值的行保留在另一列中
问题描述
a = [['John', 'Mary', 'John'], [10,22,50]])
df1 = pd.DataFrame(a, columns=['Name', 'Count'])
给定这样的数据框,我想将“Name”的所有相似字符串值与“Count”值进行比较以确定最高值。我不确定如何在 Python 的数据框中执行此操作。
例如:在上述情况下,答案将是:
- 名称计数
- 玛丽 22
- 约翰 50
较低的值 John 10 已被删除(我只想查看基于“名称”相同值的“计数”的最高值)。
在 SQL 中,它类似于 Select Case 查询(其中我选择 Case where Name == Name & Count > Count 递归地确定最大数字。或者每个名称的 For 循环,但据我所知,DataFrames 中的循环是由于对象的性质,这是个坏主意。
有没有办法在 Python 中使用 DF 来做到这一点?我可以为每个变量创建一个新的数据框(一个只有 John 的数据框,然后获得最高值(df.value()[:1] 或类似的)。但由于我有数百个独特的条目,这似乎是一个糟糕的解决方案。 :D
解决方案
和, 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
推荐阅读
- scala - 将熵计算从 Scala Spark 转换为 PySpark
- c# - 检索现有的 IServiceScope
- c# - Unity - 升级项目后,在命名空间“UnityEngine”中找不到类型名称“Rigidbody2D”
- php - 带有自定义提供程序的 vtiger 中的短信
- python - TRMM nc4 使用 python3 绘图的问题
- go - 从伪终端获取先前的输入
- java - 将日期转换为时间戳会返回错误的日期
- html - 基于子元素的中心 div
- mysql - AWS Glue 测试与 MySQL RDS 实例的连接失败,日志中没有错误
- neo4j - 查询路径时返回关系