【问题标题】:Getting an error while plotting sum and average in pandas在 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

【问题讨论】:

    标签: pandas matplotlib


    【解决方案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')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-09
        • 2022-01-08
        • 1970-01-01
        • 1970-01-01
        • 2015-08-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多