提问人:Adam CHEN 提问时间:10/28/2023 最后编辑:Adam CHEN 更新时间:10/30/2023 访问量:54
使用 Python Pandas 按顺序对值进行排序
Sort value in order with Python Pandas
问:
我有一个数据帧如下:
持械 | signs_of_mental_illness | 计数 |
---|---|---|
枪 | 假 | 628 |
枪 | 真 | 155 |
刀 | 假 | 142 |
车辆 | 假 | 104 |
刀 | 真 | 84 |
金属杆 | 真 | 1 |
金属耙 | 真 | 1 |
我想按如下方式对这个数据帧进行排序:
持械 | signs_of_mental_illness | 计数 |
---|---|---|
枪 | 假 | 628 |
枪 | 真 | 155 |
刀 | 假 | 142 |
刀 | 真 | 84 |
我累了
armed_mental = focus_age_group.groupby(['armed', 'signs_of_mental_illness'])['id'].count().sort_values(ascending=False)
有高于结果的产品。但我很难得到我想要的。具有最高数字(True + False)的类别(armed)应位于数据帧的顶部。然后是 True 和 False。
答:
1赞
mozway
10/28/2023
#1
如果要按每个“armed”的总数排序,y 首先需要将计数与 groupby.transform
组合:
import numpy as np
order = np.lexsort([df['signs_of_mental_illness'],
-df.groupby('armed')['count'].transform('sum')])
out = df.iloc[order]
另类:
out = (df.assign(total=df.groupby('armed')['count'].transform('sum'))
.sort_values(by=['total', 'signs_of_mental_illness'],
ascending=[False, True])
.drop(columns='total')
)
输出:
armed signs_of_mental_illness count
0 gun False 628
1 gun True 155
2 knife False 142
4 knife True 84
3 vehicle False 104
5 metal pole True 1
6 metal rake True 1
0赞
Rabia Naz
10/30/2023
#2
您可以通过指定用于排序的多个列来使用该方法实现所需的排序。在您的情况下,您应该首先根据“armed”列按降序对数据帧进行排序,以便在每个“armed”类别的顶部获得最高计数。接下来,按“signs_of_mental_illness”列降序排序(“False”之前为“True”)。最后,按“计数”列降序排序。sort_values
下面是基于上述解释的代码:
sorted_dataframe = your_dataframe.sort_values(by=['armed', 'signs_of_mental_illness', 'count'], ascending=[False, False, False])
因此,排序后的数据帧将显示如下:
armed signs_of_mental_illness count
0 gun False 628
1 gun True 155
2 knife False 142
4 knife True 84
3 vehicle False 104
6 metal pole True 1
7 metal rake True 1
评论