绘制在数据框中按分组的聚合

cho

我总结了一个分组依据的值。我想绘制它。

我按想要的数据对数据进行了分组。但是,我没有找到如何绘制它的图。

我有以下代码:

subset_sales = sales[sales['Is Good'] == 1].groupby(['Name','Delivery hour', 'Delivery Date'])['Volume'].agg('sum')

这给了我输出:

 Name      Delivery Hour        Delivery Date

Angela      Morning              Monday       1
                                 Tuesday      2
                                 Wednesday    3
                                 Thursday     5
                                 Friday       2
                              ...
Eva      Afternoon            Monday      7
                              Tuesday     3
                              Wednesday   5
                              Thursday    2
                              Friday      4
Name: Volume, Length: 100, dtype: float64

我重置索引:

subset_sales_2 = subset_sales.reset_index()

它提供以下输出:

      Name Delivery Hour Delivery Date  Volume 
0         Angela               Morning    Monday         1
1         Angela               Morning    Tuesday        2
2         Angela               Morning    Wednesday      3
3         Angela               Morning    Thursday       5
4         Angela               Morning    Friday         2
           ...                 ...           ...           ...
17955     Eva               Afternoon    Monday        7
17956     Eva               Afternoon    Tuesday       3
17957     Eva               Afternoon    Wednesday     5
17958     Eva               Afternoon    Thursday      2
17959     Eva               Afternoon    Friday        4

我只设法得到两个子图。目的是在同一日期的Eva和Angela的Y轴上绘制不同交货时间的体积,并以X轴为交货日期。预期输出是每次交货(早晨和下午)有两条线(Eva和Angela)的两个地块。

我首先尝试:

subset_sales_2.plot()

但是输出只是一条曲线。它看起来像所有总体积的总和。

最后,我尝试了:

subset_sales_3 = subset_sales_2.loc[(subset_sales_2['Name'] == 'Angela') & (subset_sales_2['Delivery Hour'] == 'Morning')]
subset_sales_3 = subset_sales_3.set_index('Delivery Date')
subset_sales_3['Volume'].plot()

subset_blocks_4 = subset_sales_2.loc[(subset_sales_2['Name'] == 'Eva') & (subset_sales_2['Delivery Hour'] == 'Morning')]
subset_sales_4 = subset_sales_4.set_index('Delivery Date')
subset_sales_4['Volume'].plot()

subset_sales_3['Volume'].plot() + subset_sales_4['Volume'].plot()

我收到以下错误:

TypeError: unsupported operand type(s) for +: 'AxesSubplot' and 'AxesSubplot'

仍然有一个图表作为输出,但是索引错误,因为交付日期的数量不同。

我试过了:

subset_blocks.xs('Morning', level =   1).reset_index().plot()

我得到一张图表,其中一张线代表成交量,而不是两根,一张代表伊娃,另一根代表安吉拉。

完善

通过matplotlib绘图,可以为数据帧/数组的每一列运行多个度量。因此,您需要宽数据而不是长数据。因此groupby,请考虑pivot_table生成AngelaEva等列而不是同样,对于带有一个图例图的更简单的二维(x / y),典型图使用一个分类列(即,仅“交货时间”或“仅交货日期”)。但是您可以将子图扩展为多列。下面显示了两种方法。

此外,对于工作日,请考虑使用分类法 dtype以确保x轴不是按字母顺序排列的,而是停留在周一至周五。

随机数据 (为可重复性而播种)

from pandas.api.types import CategoricalDtype  
...

### DATA BUILD
np.random.seed(11052019)
random_df = pd.DataFrame({'Name': np.random.choice(['Angela', 'Eva'], 500),
                          'Delivery Hour': np.random.choice(['Morning', 'Evening'], 500),
                          'Delivery Date': np.random.choice(list(calendar.day_name)[0:5], 500),
                          'Volume': np.random.randint(1, 10, 500)

cat_type = CategoricalDtype(categories=list(calendar.day_name)[0:5], ordered=True)
random_df['Delivery Date'] = random_df['Delivery Date'].astype(cat_type)

绘图

# AGGREGATION (WITHOUT 'Delivery Hour')
subset_sales = (random_df.pivot_table(index=['Delivery Date'], 
                                      columns='Name', values='Volume', aggfunc='sum')
                         .reset_index()
                         .set_index('Delivery Date')
                )    

### PLOTTING
subset_sales.plot(kind='line', rot=90)

plt.tight_layout()
plt.show()
plt.clf()
plt.close()

线图输出

或者,使用条形图:

subset_sales.plot(kind='bar', rot=90)

条形图输出


但是,要集成添加的维度Delivery Hoursubplots请使用DataFrame.plotax参数运行调用

# AGGREGATION (WITH 'Delivery Hour')
subset_sales = (random_df.pivot_table(index=['Delivery Hour', 'Delivery Date'], 
                                      columns='Name', values='Volume', aggfunc='sum')
                         .reset_index()
                         .set_index('Delivery Date')
                )

fig,ax = plt.subplots(nrows=1, ncols=2, figsize=(10,5))

(subset_sales[subset_sales["Delivery Hour"] == 'Morning']
      .plot(title = "Morning", rot=90, ax=ax[0])
)

(subset_sales[subset_sales["Delivery Hour"] == 'Evening']
      .plot(title = "Evening", rot=90, ax=ax[1])
)

子图输出

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在数据框中按列分组并求和

来自分类Dev

绘制按列分组的熊猫数据框

来自分类常见问题

如何在数据框中按列分组并在循环中创建数据透视表

来自分类Dev

如何在数据框中按列分组并在循环中创建数据透视表

来自分类Dev

在数据框中按列分组,并为每个组创建单独的csv

来自分类Dev

按组划分列(在数据框中分组)

来自分类Dev

按组划分列(在数据框中分组)

来自分类Dev

在熊猫数据框中按条件分组

来自分类Dev

按熊猫数据框中的字段分组

来自分类Dev

按数据框中的对象属性分组

来自分类Dev

按 R 中数据框的行绘制

来自分类Dev

如何在数据子集上运行SQL代码(按分组而不进行聚合)

来自分类Dev

仅根据数据框中的分组依据数据绘制表?

来自分类Dev

R:在数据框中为分组应用SVM功能

来自分类Dev

当变量增加时,在数据框中创建分组变量

来自分类Dev

在数据框中绘制各种阵列的CDF图

来自分类Dev

在数据框中绘制零和一的计数

来自分类Dev

在数据框中绘制各种阵列的CDF图

来自分类Dev

在图例中绘制两个不同的数据框(按一个或多个变量分组),并带有不同的标签

来自分类Dev

在数据框中按日期过滤数据

来自分类Dev

R:在数据框中按组替换数据

来自分类Dev

如何在数据框中按行处理数据

来自分类Dev

按周期将数据框中的数据分组

来自分类Dev

按因子变量在数据框中的Colmeans

来自分类Dev

在数据框中按因子拆分列

来自分类Dev

在数据框中按组折叠文本

来自分类Dev

在数据框中按条件对值进行排序

来自分类Dev

按数字在数据框中的地址列

来自分类Dev

按条件在数据框的列中填写空值

Related 相关文章

热门标签

归档