在 Pandas 中绘制总和和平均值时出错
Posted
技术标签:
【中文标题】在 Pandas 中绘制总和和平均值时出错【英文标题】:Getting an error while plotting sum and average in pandas 【发布时间】:2017-11-27 16:21:59 【问题描述】: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
【问题讨论】:
【参考方案1】:您可以将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)')
【讨论】:
【参考方案2】:代替:
df.groupby('language')['gross'].sum()
试试这个:
df.groupby('language').sum()
mean()
也是如此。这应该会让你的代码更接近运行。
调用 DataFrame 的 groupby()
方法会生成一个 groupby
对象,然后您需要在该对象上调用一个聚合函数,例如 sum
、mean
或 agg
。 groupby
文档真的很棒:https://pandas.pydata.org/pandas-docs/stable/groupby.html
此外,您也许可以通过两行实现所需的输出:
df.groupby('language').sum().plot(kind='bar')
df.groupby('language').mean().plot(kind='bar')
【讨论】:
以上是关于在 Pandas 中绘制总和和平均值时出错的主要内容,如果未能解决你的问题,请参考以下文章