决定groupby输出的顺序?

时间:2016-07-29 02:04:36

标签: python pandas group-by

在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

2 个答案:

答案 0 :(得分: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

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

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

答案 1 :(得分:0)

sort=False只是意味着它不能保证排序(可以订购)。我的回忆是,这是在"看到的顺序",但再次没有保证。

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

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