假设我有以下数据:
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,因此我想对数据进行排序,这样狗就比猫和鸟先,如下所示:
A B
1 dog 5
2 dog 8
3 dog 11
4 cat 3
5 cat 7
6 bird 3
7 bird 5做这件事最好的方法是什么?我试图将'A‘列设置为索引,而不是玩排序,但我找不出答案。任何帮助都将不胜感激!
发布于 2018-10-29 13:40:47
将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 5https://stackoverflow.com/questions/53046711
复制相似问题