我有一个这样的数据框:
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')})
Run Code Online (Sandbox Code Playgroud)
我想根据“类别”列中的类别绘制男性或女性性别计数。
我试过了:
df.groupby(['category','sex'])['category','sex'].count().plot.bar()
如何获得每个类别的性别计数?
Pou*_*del 15
import numpy as np
import pandas as pd
df = pd.DataFrame({'category': list('XYZXY'),
'NotUsed': range(5,10),
'sex': list('mfmff')})
category NotUsed sex
0 X 5 m
1 Y 6 f
2 Z 7 m
3 X 8 f
4 Y 9 f
Run Code Online (Sandbox Code Playgroud)
pd.crosstab(df['category'],df['sex']).plot.bar()
Run Code Online (Sandbox Code Playgroud)
(df.groupby(['sex','category'])['B']
.count().unstack('sex').plot.bar())
Run Code Online (Sandbox Code Playgroud)
pd.pivot_table(df, values = 'B', index = 'category',
columns = 'sex',aggfunc ='count').plot.bar()
Run Code Online (Sandbox Code Playgroud)
import seaborn as sns
sns.countplot(data=df,x='category',hue='sex')
or,
sns.catplot(data=df,kind='count',x='category',hue='sex')
Run Code Online (Sandbox Code Playgroud)
IIUC,
df.groupby(['category','sex']).B.count().unstack().reset_index()\
.plot.bar(x = 'category', y = ['f', 'm'])
Run Code Online (Sandbox Code Playgroud)
编辑:如果有多个列,则可以使用groupby,count和droplevel。
new_df = df.groupby(['category','sex']).count().unstack()
new_df.columns = new_df.columns.droplevel()
new_df.reset_index().plot.bar()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3372 次 |
| 最近记录: |