Issue
I have a dataframe like this:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
df = pd.DataFrame({'category': list('XYZXY'), 'B': range(5,10),'sex': list('mfmff')})
I want to plot count of sex male or female based on category from column 'category'.
I tried:
df.groupby(['category','sex'])['category','sex'].count().plot.bar()
How to get the count of sex per category?
Solution
Various Methods of Groupby Plots
Data
import numpy as np
import pandas as pd
df = pd.DataFrame({'category': list('XYZXY'),
'sex': list('mfmff'),
'ThisColumnIsNotUsed': range(5,10)})
df
category sex ThisColumnIsNotUsed
0 X m 5
1 Y f 6
2 Z m 7
3 X f 8
4 Y f 9
Using crosstab
pd.crosstab(df['category'],df['sex']).plot.bar()
Using groupby+unstack:
(df.groupby(['sex','category'])
.count().unstack('sex').plot.bar())
Using pivot_table:
pd.pivot_table(df,index = 'category',
columns = 'sex',aggfunc ='count').plot.bar()
Using seaborn:
import seaborn as sns
sns.countplot(data=df,x='category',hue='sex')
or,
sns.catplot(data=df,kind='count',x='category',hue='sex')
output
Answered By - BhishanPoudel
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.