在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
答案 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