在 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】:

您可以将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)')

如果想旋转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 对象,然后您需要在该对象上调用一个聚合函数,例如 summeanagggroupby 文档真的很棒:https://pandas.pydata.org/pandas-docs/stable/groupby.html

此外,您也许可以通过两行实现所需的输出:

df.groupby('language').sum().plot(kind='bar')
df.groupby('language').mean().plot(kind='bar')

【讨论】:

以上是关于在 Pandas 中绘制总和和平均值时出错的主要内容,如果未能解决你的问题,请参考以下文章

pandas DataFrame中按日期(在索引中)的加权平均分组(每列不同的操作)

如何计算数组中元素的总和和平均值?

忽略 NaN 的 Pandas 聚合

SQL:当某些月份没有记录时,如何查询每月总和的平均值?

如何平滑和绘制 x 与 y 的加权平均值,由 x 加权?

具有时间偏移熊猫的滚动平均值