Python 熊猫:基于每个组中的最大值的GroupBy和Order组

Python 熊猫:基于每个组中的最大值的GroupBy和Order组,python,pandas,Python,Pandas,我有一个熊猫数据框,其中包含曲目、乐谱和其他一些列 我想按“轨迹”分组,然后根据“分数”上的最大值对这些组进行排序 示例数据帧: tracks score 20 2.2 20 1.5 25 3.5 24 1.2 24 5.5 预期输出(我想比较每个组的最高值,并将所有组从最高到最低排序,但我不想丢失任何其他数据-意味着我想显示所有行): 目前,我获得以下输出(我的分数已排序

我有一个熊猫数据框,其中包含曲目、乐谱和其他一些列

我想按“轨迹”分组,然后根据“分数”上的最大值对这些组进行排序

示例数据帧

tracks       score
20            2.2
20            1.5
25            3.5
24            1.2
24            5.5
预期输出(我想比较每个组的最高值,并将所有组从最高到最低排序,但我不想丢失任何其他数据-意味着我想显示所有行):

目前,我获得以下输出(我的分数已排序,但在“按我的曲目分组”后,将根据曲目编号进行排序):

我到目前为止的做法是: 1.我已经按分数对所有值进行了排序

sub_df = sub_df.sort_values("score")
  • 然后,我将执行以下操作以获得输出(我需要字典格式):
  • url\u dict=sub\u df.groupby('track')['url'])。应用(列表)。to\u dict()

    我还尝试使用OrderedDict,但它没有用(至少现在是这样),因为groupBy命令发送错误的数据序列

    Pandas=0.23,Python=3.6.4

    创建辅助列并按多个列排序,最后删除辅助列:

    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)
    
    这将仅显示最大值,如果要查看全部,请删除“头(1)”

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