gpt4 book ai didi

python - Pandas:GroupBy 和 Order Groups 基于每组中的最大值

转载 作者:行者123 更新时间:2023-12-03 23:19:37 25 4
gpt4 key购买 nike

我有一个 Pandas 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 命令发送了错误的数据序列。

Pandas = 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

关于python - Pandas:GroupBy 和 Order Groups 基于每组中的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55157635/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com