决定了groupby输出的顺序?

2024-04-27 03:54:22 发布

您现在位置:Python中文网/ 问答频道 /正文

在groupby之后,预先决定组的输出顺序。在以下情况下,顺序是A、AAA、B、BBB。你知道吗

有办法定制这个订单吗?我想订AAA,A,BBB,B。我可能还想订其他的。你知道吗

import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
%matplotlib inline
data=pd.DataFrame({'Rating':['A','AAA','B','BBB','A','AAA','B','BBB'],
                  'Score':[2,4,5,6,2,4,5,6,]})
t=data.groupby('Rating', sort=False)['Score'].mean()
t
Rating
A      2
AAA    4
B      5
BBB    6
Name: Score, dtype: int64

Tags: 订单importpandasdata顺序matplotlibas情况
2条回答

不能更改groupby/mean返回的顺序(使用sort参数保存可能的内容)。但是,使用reindex可以很容易地在事后更改顺序:

In [24]: data.groupby('Rating', sort=False)['Score'].mean().reindex(['AAA', 'A', 'BBB', 'B'])
Out[24]: 
Rating
AAA    4
A      2
BBB    6
B      5
Name: Score, dtype: int64

或者,您可以通过将Ratings更改为Categorical来控制groupby/mean返回的顺序:

import pandas as pd

data = pd.DataFrame({'Rating':['A','AAA','B','BBB','A','AAA','B','BBB'],
                  'Score':[2,4,5,6,2,4,5,6,]})
data['Rating'] = pd.Categorical(data['Rating'], categories=['AAA','A','BBB','B'], 
                                ordered=True)
result = data.groupby('Rating', sort=False)['Score'].mean()
print(result)

收益率

Rating
AAA    4
A      2
BBB    6
B      5
Name: Score, dtype: int64

sort=False只是意味着它不能保证被排序(它可以被排序)。我的记忆是,这是在“看到的顺序”,但同样是没有保证。你知道吗

要对groupby的输出进行排序,只需在后面进行排序(按索引):

In [11]: t.sort_index()
Out[11]:
Rating
A      2
AAA    4
B      5
BBB    6
Name: Score, dtype: int64

相关问题 更多 >