基于数据帧整列值创建sns.factorplot的多个子批

2024-09-27 07:35:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个如下所示的数据框, df_销售:

               ProductCode  Weekly_Units_Sold Is_Promo
  Date

  2015-01-11      1               49.0       No
  2015-01-11      2               35.0       No
  2015-01-11      3               33.0       No
  2015-01-11      4               40.0       No
  2015-01-11      5               53.0       No
    ...          ...                ...      ...
  2015-07-26     313               93.0      No
  2015-07-26     314                4.0      No
  2015-07-26     315                1.0      No
  2015-07-26     316                5.0      No
  2015-07-26     317                2.0      No

希望观察以下Sns.factorplot类似代码对每个ProductCode的PromotTime效果:

sns.factorplot(data= df_sales,
                x= 'Is_Promo',
                y= 'Weekly_Units_Sold',
                hue= 'ProductCode');

它运行良好,但由于317个产品绘制在一个表中,因此它看起来非常混乱和重叠。(https://i.stack.imgur.com/fgrjV.png

使用此代码拆分数据帧时:

df_sales=df_sales.query('1<=ProductCode<=10')

它看起来可读性很好。 https://i.stack.imgur.com/NTQev.png

因此,ı希望借助于拆分10个productcode范围的数据来绘制子批次(比如第一个子批次productcode为[1-10],第二个子批次productcode为[11-20]…[291-300],[301-310],[311-317])

我失败的尝试:`

g=sns.FacetGrid(df_sales,col='ProductCode')
   g.map(sns.factorplot,'Is_Promo','Weekly_Units_Sold')
   sns.factorplot(data= df_sales,
               x= 'Is_Promo',
               y= 'Weekly_Units_Sold',
               hue= 'ProductCode');

我尝试不使用10个ProductCode范围进行拆分。 我刚刚尝试为每个ProductCode创建子包,但是 给我图像大小错误

那么,我如何创建sns.factorplot的子图,根据ProductCode范围进行拆分,以获得更易于阅读的结果呢

谢谢


Tags: 数据no代码dfdataisunitssales
1条回答
网友
1楼 · 发布于 2024-09-27 07:35:58

您需要为每组产品创建一个具有唯一值的新列。一种简单的方法是使用^{}

Nproducts = 100
Ngroups = 10
df1 = pd.DataFrame({'ProductCode':np.arange(Nproducts),
                    'Weekly_Units_Sold': np.random.random(size=Nproducts),
                    'Is_Promo':'No'})
df2 = pd.DataFrame({'ProductCode':np.arange(Nproducts),
                    'Weekly_Units_Sold': np.random.random(size=Nproducts),
                    'Is_Promo':'Yes'})
df = pd.concat([df1,df2])
df['ProductGroup'] = pd.cut(df['ProductCode'], Ngroups, labels=False)

之后,您可以基于ProductGroup来刻面,并为每个组绘制您想要的任何关系

g = sns.FacetGrid(data=df, col='ProductGroup', col_wrap=3, hue='ProductCode')
g.map(sns.pointplot, 'Is_Promo', 'Weekly_Units_Sold', order=['No','Yes'])

enter image description here

请注意,这是使用seaborn v.0.10.0实现的factorplot()在v.0.9中被重命名为catplot,因此您可能需要调整版本差异

EDIT:要创建图例,我必须稍微修改代码,将hue参数移出FacetGrid:

g = sns.FacetGrid(data=df, col='ProductGroup', col_wrap=3)
g.map_dataframe(sns.pointplot, 'Is_Promo', 'Weekly_Units_Sold', order=['Yes','No'], hue='ProductCode')
for ax in g.axes.ravel():
    ax.legend(loc=1, bbox_to_anchor=(1.1,1))

enter image description here

相关问题 更多 >

    热门问题