在绘制熊猫的总和和平均值时出错

时间:2017-06-24 03:20:59

标签: pandas matplotlib

total_income_language = pd.DataFrame(df.groupby('language')['gross'].sum())   
average_income_language = pd.DataFrame(df.groupby('language')['gross'].mean()) 



plt.bar(total_income_language.index, total_income_language["gross"],  
                 label="Total Income of Language")
plt.bar(average_income_language.index, average_income_language["gross"], 
                 label="Average Income of Language")

plt.xlabel("Language")

plt.ylabel("Log Dollar Values(Gross)")

我想绘制每种语言的总和和平均值。我不确定我的代码是否符合我的要求。我在尝试绘制这个时遇到了错误。我不知道我在编码方面搞砸了。我需要一些帮助。

Here's the error message

2 个答案:

答案 0 :(得分:2)

您可以使用groupbyagg进行汇总,按dict重命名列,然后按DataFrame.plot.bar进行绘制。

最后按ax.set设置标签。

df = pd.DataFrame({'language':['en','de','en','de','sk','sk'],
                   'gross':[10,20,30,40,50,60]})

print (df)
   gross language
0     10       en
1     20       de
2     30       en
3     40       de
4     50       sk
5     60       sk

d = {'mean':'Average Income of Language','sum':'Total Income of Language'}
df1 = df.groupby('language')['gross'].agg(['sum','mean']).rename(columns=d)
print (df1)
          Total Income of Language  Average Income of Language
language                                                      
de                              60                          30
en                              40                          20
sk                             110                          55

ax = df1.plot.bar()
ax.set(xlabel='Language', ylabel='Log Dollar Values(Gross)')

graph

如果要旋转axis x的标签:

ax = df1.plot.bar(rot=0)
ax.set(xlabel='Language', ylabel='Log Dollar Values(Gross)')

graph1

答案 1 :(得分:1)

而不是:

df.groupby('language')['gross'].sum()

试试这个:

df.groupby('language').sum()

mean()类似。这应该让你的代码更接近于运行。

调用DataFrame的groupby()方法会产生一个groupby对象,然后您需要在该对象上调用聚合函数,例如summean或{{1 }}。 agg文档非常棒:https://pandas.pydata.org/pandas-docs/stable/groupby.html

此外,您可以用两行来实现所需的输出:

groupby