簡體   English   中英

Python GroupBy sort 按分組內的列降序

[英]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

正如furasjezrael提到的,使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM