how to plot a dataframe grouped by two columns in matplotlib and pandas

梦想的初衷 提交于 2021-02-10 06:52:30

问题


I have the following dataframe:

                        total_gross_profit
  first_day_week    var 
      Feb-06         1  45293.09
                     2  61949.54
      Feb-13         1  44634.72
                     2  34584.15
      Feb-20         1  43796.89
                     2  37308.57
      Feb-27         1  44136.21
                     2  38237.67
      Jan-16         1  74695.91
                     2  75702.02
      Jan-23         1  86101.05
                     2  69518.39
      Jan-30         1  65913.56
                     2  74823.94
      Mar-06         1  34256.47
                     2  31953.00

grouped by first_day_week and var columns i need to make a bar plot where i have first_day_week in x axis and for each entry in first_day_week two bar plot for each value in var in different colors, something similar to (data for following barplot is totaly fake) :


回答1:


You need reshape by unstack and then plot by DataFrame.plot.bar:

print (df.unstack()['total_gross_profit'])
var                    1         2
first_day_week                    
Feb-06          45293.09  61949.54
Feb-13          44634.72  34584.15
Feb-20          43796.89  37308.57
Feb-27          44136.21  38237.67
Jan-16          74695.91  75702.02
Jan-23          86101.05  69518.39
Jan-30          65913.56  74823.94
Mar-06          34256.47  31953.00


df.unstack()['total_gross_profit'].plot.bar(rot=0)

For sorting index need convert to datetime, sort and then reindex:

df1 = df.unstack()['total_gross_profit']
idx = pd.to_datetime(df1.index, format='%b-%d').sort_values().strftime('%b-%d')
print (idx)
['Jan-16' 'Jan-23' 'Jan-30' 'Feb-06' 'Feb-13' 'Feb-20' 'Feb-27' 'Mar-06']

df1.reindex(idx).plot.bar(rot=90)



来源:https://stackoverflow.com/questions/42784930/how-to-plot-a-dataframe-grouped-by-two-columns-in-matplotlib-and-pandas

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!