我有三个客户的付款数据,每次付款的月份和年份: user_id amount Mon_Year2076273 1664 245.16 Jan-20193682561 1664 122.58 Jul-20195437947 1664 109.43 Nov-20196067277 1664 218.86 Dec-20191911317 3396 319.00 Jan-20196079810 3396 360.00 Dec-20191961388 4192 104.28 Jan-20192500575 4192 104.28 Mar-20192709024 4192 104.28 Apr-20193049894 4192 104.28 May-2019我可以为每个客户创建一个情节:for user in df.user_id.unique(): temp = df[df['user_id']==user] plt.figure(figsize=(15,5)) ax = sns.barplot(x="Mon_Year", y="amount", data=temp,ci=None) ax.set_title(f'transactions for user: {user}') ax.set_xticklabels(ax.get_xticklabels(),rotation=30) plt.show()但是,我希望每个图都具有相同的 xticks(Mon_Year列中的所有日期),因此图具有相同的比例。情节 #2 缺少几个月,所以理想情况下它将有空条。我将能够更轻松地比较客户,并查看哪些月份没有花费。像这样:我尝试使用xlim但完全破坏了它,我认为这仅适用于数值数据,但是Mon_Year是分类的。对于此示例 df,xticks 的范围从 2019 年 1 月到 2019 年 12 月:df.Mon_Year.unique()array(['Jan-2019', 'Jul-2019', 'Nov-2019', 'Dec-2019', 'Mar-2019', 'Apr-2019', 'May-2019'], dtype=object)请注意,在 df 中,我为每个客户按月顺序对它们进行了预排序。如何xlim使用分类数据进行设置并在每次迭代时保持相同?亩样品df:import pandas as pdimport seaborn as snsdf = pd.DataFrame({'index': pd.Series([2076273, 3682561, 5437947, 6067277, 1911317, 6079810, 1961388, 2500575, 2709024, 3049894],dtype='int64',index=pd.RangeIndex(start=0, stop=10, step=1)), 'user_id': pd.Series(['1664', '1664', '1664', '1664', '3396', '3396', '4192', '4192', '4192', '4192'],dtype='object',index=pd.RangeIndex(start=0, stop=10, step=1)), 'amount': pd.Series([245.16, 122.58, 109.43, 218.86, 319.0, 360.0, 104.28, 104.28, 104.28, 104.28],dtype='float64',index=pd.RangeIndex(start=0, stop=10, step=1)), 'Mon_Year': pd.Series(['Jan-2019', 'Jul-2019', 'Nov-2019', 'Dec-2019', 'Jan-2019', 'Dec-2019', 'Jan-2019', 'Mar-2019', 'Apr-2019', 'May-2019'],dtype='object',index=pd.RangeIndex(start=0, stop=10, step=1))}, index=pd.RangeIndex(start=0, stop=10,
1 回答
小唯快跑啊
TA贡献1863条经验 获得超2个赞
我修改了您的循环以将所有月年值添加到数据框中temp
。这将为新行添加 NaN 值,index
并amount
在结果图中添加一个空白区域。
mon_year = ['Jan-2019', 'Feb-2019', 'Mar-2019', 'Apr-2019', 'May-2019', 'Jun-2019', 'Jul-2019','Aug-2019', 'Sept-2019', 'Oct-2019', 'Nov-2019', 'Dec-2019']for user in df.user_id.unique(): temp = df[df['user_id']==user].set_index('Mon_Year') temp = temp.reindex(mon_year) temp = temp.reset_index() plt.figure(figsize=(15,5)) ax = sns.barplot(x="Mon_Year", y="amount", data=temp,ci=None) ax.set_title(f'transactions for user: {user}') ax.set_xticklabels(ax.get_xticklabels(),rotation=30) plt.show()
添加回答
举报
0/150
提交
取消