首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫将一列的值按另一列的平均值排序。

熊猫将一列的值按另一列的平均值排序。
EN

Stack Overflow用户
提问于 2018-10-29 13:37:32
回答 1查看 2.2K关注 0票数 2

假设我有以下数据:

代码语言:javascript
复制
    A    B
1  cat   3
2  cat   7
3  dog   5
4  dog   8
5  dog   11 
6  bird  3
7  bird  5

“猫”的平均值是5,“狗”的平均数是8,“鸟”的平均数是4,因此我想对数据进行排序,这样狗就比猫和鸟先,如下所示:

代码语言:javascript
复制
    A    B
1  dog   5
2  dog   8
3  dog   11
4  cat   3
5  cat   7
6  bird  3
7  bird  5

做这件事最好的方法是什么?我试图将'A‘列设置为索引,而不是玩排序,但我找不出答案。任何帮助都将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-29 13:40:47

GroupBy.transformmean一起用于与原始DataFrame大小相同的聚合值系列,然后使用argsort in descending order表示位置并按DataFrame.iloc重新排序

代码语言:javascript
复制
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

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53046711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档