我有一个看起来像这样的数据框:
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/