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)")
我想绘制每种语言的总和和平均值。我不确定我的代码是否符合我的要求。我在尝试绘制这个时遇到了错误。我不知道我在编码方面搞砸了。我需要一些帮助。
答案 0 :(得分:2)
您可以使用groupby
按agg
进行汇总,按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)')
如果要旋转axis x
的标签:
ax = df1.plot.bar(rot=0)
ax.set(xlabel='Language', ylabel='Log Dollar Values(Gross)')
答案 1 :(得分:1)
而不是:
df.groupby('language')['gross'].sum()
试试这个:
df.groupby('language').sum()
与mean()
类似。这应该让你的代码更接近于运行。
调用DataFrame的groupby()
方法会产生一个groupby
对象,然后您需要在该对象上调用聚合函数,例如sum
,mean
或{{1 }}。 agg
文档非常棒:https://pandas.pydata.org/pandas-docs/stable/groupby.html
此外,您可以用两行来实现所需的输出:
groupby