我有一个看起来像这样的数据框:

Speciality     Amount
Greek          15
Greek          16
Italian        8
Italian        11
Italian        13

我现在汇总了每个专业的平均值和计数:
df_by_spec_count = df.groupby('Speciality').agg(['mean', 'count'])

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

我试过这个:
print df_by_spec_count.sort_values(by='count',ascending=False).head()

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

最佳答案

另一种解决方案是通过 MultiIndex.droplevel 删除顶级:

df_by_spec_count = df.groupby('Speciality').agg(['mean', 'count'])
df_by_spec_count.columns = df_by_spec_count.columns.droplevel(0)
print (df_by_spec_count)

                 mean  count
Speciality
Greek       15.500000      2
Italian     10.666667      3

print (df_by_spec_count.sort_values(by='count',ascending=False).head())
                 mean  count
Speciality
Italian     10.666667      3
Greek       15.500000      2

但更好的解决方案是指定列 Amount 以在 groupby 中聚合 - 在列中获取 no Multiindex:
df_by_spec_count = df.groupby('Speciality')['Amount'].agg(['mean', 'count'])
print (df_by_spec_count)
                 mean  count
Speciality
Greek       15.500000      2
Italian     10.666667      3

print (df_by_spec_count.sort_values(by='count',ascending=False).head())
                 mean  count
Speciality
Italian     10.666667      3
Greek       15.500000      2

关于python - pandas:如何按平均数量对分组数据框进行排序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38126375/

10-11 22:27
查看更多