簡體   English   中英

熊貓:根據每個組中的最大值進行分組並按順序分組

[英]Pandas: GroupBy and Order Groups based on max value in each group

我有一個Pandas DataFrame,其中包含音軌,樂譜和其他一些列。

我想按“曲目”分組,然后根據“得分”上的最大值對這些分組進行排序。

示例DataFrame

tracks       score
20            2.2
20            1.5
25            3.5
24            1.2
24            5.5

預期的輸出 (我想比較每個組的最高值,並按從高到低的順序對所有組進行排序,盡管我不想丟失任何其他數據-意味着我想顯示所有行):

tracks       score
24            5.5
              1.2
25            3.5
20            2.2
              1.5

當前,我得到以下輸出(我的得分已排序,但根據曲目編號對我的曲目分組后):

    tracks       score
20            2.2
              1.5
24            5.5
              4.2
25            3.5

到目前為止,我的方法:1.我已經按照分數對所有值進行了排序

sub_df = sub_df.sort_values("score")
  1. 然后,我正在執行以下操作以獲取輸出(我需要以字典格式):

url_dict = sub_df.groupby('track')['url'].apply(list).to_dict()

我也嘗試過使用OrderedDict,但是它沒有用(至少到目前為止),因為groupBy命令發送的數據序列錯誤。

熊貓= 0.23,Python = 3.6.4

通過創建輔助柱GroupBy.transform並通過多列排序DataFrame.sort_values ,最后刪除輔助列:

sub_df['max'] = sub_df.groupby('tracks')['score'].transform('max')

sub_df = sub_df.sort_values(["max","score"], ascending=False).drop('max', axis=1)
#if necessary sorting also by tracks column
#sub_df = sub_df.sort_values(["max","tracks","score"], ascending=False).drop('max', axis=1)
print (sub_df)
   tracks  score
4      24    5.5
3      24    1.2
2      25    3.5
0      20    2.2
1      20    1.5

可能有點長,但這是我使用的:

首先設置索引:

df.set_index(['x', 'y'], inplace=True)

然后在基於索引的雙重排序數據幀上使用groupby

new_df = df.groupby(level=[0,1]).sum().reset_index() \
          .sort_values(['x', 'y'], ascending=[1,0]).groupby('x').head(1)

這將僅顯示最大值,如果要查看全部,請刪除“ head(1)”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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