pandas - Python - 对列进行升序排序 - 使用 groupby
问题描述
以下代码:
import pandas as pd
df_original=pd.DataFrame({\
'race_num':[1,1,1,2,2,2,2,3,3],\
'race_position':[2,3,0,1,0,0,2,3,0],\
'percentage_place':[77,55,88,50,34,56,99,12,75]
})
给出以下输出:
种族编号 | 比赛位置 | 百分比位置 |
---|---|---|
1 | 2 | 77 |
1 | 3 | 55 |
1 | 0 | 88 |
2 | 1 | 50 |
2 | 0 | 34 |
2 | 0 | 56 |
2 | 2 | 99 |
3 | 3 | 12 |
3 | 0 | 75 |
我需要维护这个数据框以保持race_num
分组,但按升序对百分比位置进行排序 - 并且race_position
要与原始数据保持一致percentage_place
。
想要的结果是:
种族编号 | 比赛位置 | 百分比位置 |
---|---|---|
1 | 0 | 88 |
1 | 2 | 77 |
1 | 3 | 55 |
2 | 2 | 99 |
2 | 0 | 56 |
2 | 1 | 50 |
2 | 0 | 34 |
3 | 0 | 75 |
3 | 3 | 12 |
我的尝试是:
df_new = df_1.groupby(['race_num','race_position'])\['percentage_place'].nlargest().reset_index()
先感谢您。
解决方案
In [137]: df_original.sort_values(['race_num', 'percentage_place'], ascending=[True, False])
Out[137]:
race_num race_position percentage_place
2 1 0 88
0 1 2 77
1 1 3 55
6 2 2 99
5 2 0 56
3 2 1 50
4 2 0 34
8 3 0 75
7 3 3 12
推荐阅读
- java - 即使我将 1 个数组的值存储到另一个数组中并将它们作为一个整体打印,但数组仍然会打印最后一个值
- google-cloud-storage - 与 GCSFUSE 但没有 gsutil 和 ftp 的 Google Storage Cloud 存储桶允许我上传文件
- php - PHP按值将数组拆分为2个数组
- java - java map获取与抽象类的子类不兼容的类型
- image - Img 源将 prop 传递给子组件 Vue Js
- swift - 如何从 Firebase 获取错误代码?
- asp.net - Rest Web Api XML 绑定 - Asp.Net MVC
- r - 如何使用 ggplot 创建两条线和散点图
- c# - WinForm中如何调用AppService
- eloquent - 从日期开始的持续时间内的雄辩的单位总和