Python中的Groupby和Plot条形图

时间:2018-09-16 15:57:24

标签: python pandas plot pandas-groupby

我想为一年中的销售额绘制条形图。 x轴为'year',y轴为每年的每周销售额之和。绘图时我得到'KeyError: 'year'。我猜是因为'year'在分组依据期间成为了索引。

以下是csv文件中的示例内容:

Store   year    Weekly_Sales
1   2014    24924.5
1   2010    46039.49
1   2015    41595.55
1   2010    19403.54
1   2015    21827.9
1   2010    21043.39
1   2014    22136.64
1   2010    26229.21
1   2014    57258.43
1   2010    42960.91

下面是我用来分组的代码

storeDetail_df = pd.read_csv('Details.csv')
result_group_year= storeDetail_df.groupby(['year'])
total_by_year = result_group_year['Weekly_Sales'].agg([np.sum])

total_by_year.plot(kind='bar' ,x='year',y='sum',rot=0)

更新了代码,下面是输出: DataFrame输出:

   year          sum
0  2010  42843534.38
1  2011  45349314.40
2  2012  35445927.76
3  2013         0.00

以下是我得到的图表: enter image description here

3 个答案:

答案 0 :(得分:3)

在读取csv文件时,需要使用空格作为delim_whitespace=True的分隔符,然后在对Weekly_Sales求和后将索引重置。下面是工作代码:

storeDetail_df = pd.read_csv('Details.csv', delim_whitespace=True)
result_group_year= storeDetail_df.groupby(['year'])
total_by_year = result_group_year['Weekly_Sales'].agg([np.sum]).reset_index()
total_by_year.plot(kind='bar' ,x='year',y='sum',rot=0,  legend=False)

输出

enter image description here

答案 1 :(得分:0)

如果按年份将索引作为年份,则按命令分组。您需要在作图之前将其作为索引删除。 尝试

total_by_year = total_by_year.reset_index(drop=False, inplace=True)

答案 2 :(得分:0)

您可能想尝试一下

storeDetail_df = pd.read_csv('Details.csv')
result_group_year= storeDetail_df.groupby(['year'])['Weekly_Sales'].sum()

result_group_year = result_group_year.reset_index(drop=False)
result_group_year.plot.bar(x='year', y='Weekly_Sales')
相关问题