pandas:如何按平均数量对分组数据框进行排序?

Ric*_*ard 6 python pandas

我有一个如下所示的数据框:

Speciality     Amount
Greek          15
Greek          16 
Italian        8
Italian        11
Italian        13
Run Code Online (Sandbox Code Playgroud)

我现在汇总了每个专业的平均值和计数:

df_by_spec_count = df.groupby('Speciality').agg(['mean', 'count'])
Run Code Online (Sandbox Code Playgroud)

现在我想打印平均值最高的前 10 个专业。

我试过这个:

print df_by_spec_count.sort_values(by='count',ascending=False).head()
Run Code Online (Sandbox Code Playgroud)

但我收到一个 KeyError 错误。我究竟做错了什么?

EdC*_*ica 2

您有分层列,因此需要传递一个元组来选择要排序的适当列级别:

In [324]:

df_by_spec_count.sort_values(by=('Amount','count'),ascending=False).head()
Out[324]:
               Amount      
                 mean count
Speciality                 
Italian     10.666667     3
Greek       15.500000     2
Run Code Online (Sandbox Code Playgroud)

如果您查看原始分组结果,您就会明白原因:

In[321]:
df_by_spec_count

Out[321]:
               Amount      
                 mean count
Speciality                 
Greek       15.500000     2
Italian     10.666667     3

In [325]:
df_by_spec_count.columns

Out[325]:
MultiIndex(levels=[['Amount'], ['mean', 'count']],
           labels=[[0, 0], [0, 1]])
Run Code Online (Sandbox Code Playgroud)