user8322222
user8322222

Reputation: 529

stacked bar chart for grouped pandas series

Hi have a dataframe that looks like this:

ID  Date  Total_Amount  priority
1   2007  4488          High 
2   2007  40981         Low
3   2017  450           Medium
4   2008  1000          Low

each row is a new person (ID) and the rows show how much they spent per year (total amount).

I want to create a bar chart with the years on the x-axis and the Total_Amount as the y-axis height but it needs to be stacked by priority. e.g. if 10 spent money in 2007 and their Total_Amount sum is £100,000, the height of the bar needs to be 100,000 stacked by priority( e.g. 5 may have been high, 4 low and 1 medium).

I tried using crosstab with date as row and priority as columns but I don't get a dataframe for Total_Amount spent, I get one for the number of people in each priority.

Upvotes: 0

Views: 422

Answers (2)

BENY
BENY

Reputation: 323376

Almost same we still using crosstab

pd.crosstab(index=df.Date,columns=df.priority,values=df.Total_Amount,aggfunc='sum')\
    .fillna(0).plot(kind='bar')

Upvotes: 0

rahlf23
rahlf23

Reputation: 9019

You can use groupby() and then unstack():

df2 = df.groupby(['Date','priority'])['Total_Amount'].sum().unstack('priority').fillna(0)
df2.plot(kind='bar', stacked=True)

Produces:

enter image description here

Upvotes: 1

Related Questions