gpt4 book ai didi

python - Pandas 按另一列的平均值对一列的值进行排序

转载 作者:太空宇宙 更新时间:2023-11-04 02:14:02 25 4
gpt4 key购买 nike

假设我有以下数据框:

    A    B
1 cat 3
2 cat 7
3 dog 5
4 dog 8
5 dog 11
6 bird 3
7 bird 5

'cat' 的平均值为 5,'dog' 的平均值为 8,'bird' 的平均值为 4,因此我想对数据框进行排序,以便狗排在第一位,然后是猫和鸟,像下面这样:

    A    B
1 dog 5
2 dog 8
3 dog 11
4 cat 3
5 cat 7
6 bird 3
7 bird 5

最好的方法是什么?我试图将“A”列设置为索引而不是对其进行排序,但我无法弄清楚。任何帮助将不胜感激!

最佳答案

使用GroupBy.transform使用 mean 获取与原始 DataFrame 大小相同的一系列聚合值,然后使用 argsort in descending order位置和重新排序 DataFrame.iloc :

df = df.iloc[(-df.groupby('A')['B'].transform('mean')).argsort()]
print (df)
A B
3 dog 5
4 dog 8
5 dog 11
1 cat 3
2 cat 7
6 bird 3
7 bird 5

或将聚合值转换为有序 Categorical然后 sort_values :

a = df.groupby('A')['B'].mean().sort_values(ascending=False)

df['A'] = pd.Categorical(df['A'], ordered=True, categories=a.index)
df = df.sort_values('A')
print (df)
A B
3 dog 5
4 dog 8
5 dog 11
1 cat 3
2 cat 7
6 bird 3
7 bird 5

关于python - Pandas 按另一列的平均值对一列的值进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53046711/

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