![](/img/trans.png)
[英]How can I calculate percentage of a groupby column and sort it by descending order?
[英]Python GroupBy sort Descending by column within grouping
我有一個包含以下列的數據集 - ID、舊階段、新階段和周期編號。 每個ID都有多行(2+),描繪了新舊之間的一系列來回階段; 這由周期編號詳細說明。
我正在嘗試按 ID 對多行進行分組(沒關系),但在該分組中我想按周期編號排序。 例如,如果 ID 1 有 6 個周期,我希望首先列出周期 #6,然后是 5、4、3 等。
grouped2 = df.groupby(['ID', 'Old_Stage', 'New_Stage'], as_index=False)['Cycle_Number'].max().sort_values(['Cycle_Number'], ascending=False)
print(grouped2)
這是我嘗試過的,但是,它僅按整體降序對 Cycle Numbers 進行排序,而不是在 ID grouping中。
編輯
當前 dataframe:
|ID |Old Stage |New Stage |Cycle Number|
|100|In Progress |Under Review|1
|100|Not Started |In Progress |0
|100|Under Review|Completed |2
|100|Completed |In Progress |3
所需的 dataframe:
|ID |Old Stage |New Stage |Cycle Number|
|100|Completed |In Progress |3
| |Under Review|Completed |2
| |In Progress |Under Review|1
| |Not Started |In Progress |0
正如furas和jezrael提到的,使用pandas.DataFrame.sort_values
,如下,應該解決OP的問題
df = df.sort_values(by=['ID', 'Cycle Number'], ascending=[True, False])
[Out]:
ID Old Stage New Stage Cycle Number
3 100 Completed In Progress 3
2 100 Under Review Completed 2
0 100 In Progress Under Review 1
1 100 Not Started In Progress 0
但是,OP提到
它不會按 ID 分組
似乎 OP 指的是索引的順序。 正如人們在之前的 dataframe 的 output 上看到的那樣,它從 3 變為 2,變為 0,變為 1,並且,IIUC,OP 希望它從 0 變為 1,變為 2,依此類推。
如果是這種情況,那么缺少的只是.reset_index(drop=True)
如下
df = df.sort_values(by=['ID', 'Cycle Number'], ascending=[True, False]).reset_index(drop=True)
[Out]:
ID Old Stage New Stage Cycle Number
0 100 Completed In Progress 3
1 100 Under Review Completed 2
2 100 In Progress Under Review 1
3 100 Not Started In Progress 0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.