熊猫按两列分组并绘制

新手上路,请多包涵

我有一个这样的数据框:

 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')})

我想根据“类别”列中的类别绘制男性或女性的性别数量。

我试过了:

df.groupby(['category','sex'])['category','sex'].count().plot.bar()

但这给出了:

在此处输入图像描述

我如何获得每个类别的性别数量?

原文由 BhishanPoudel 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 487
2 个回答

Groupby 绘图的各种方法

数据

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

使用交叉表

pd.crosstab(df['category'],df['sex']).plot.bar()

使用 groupby+unstack:

 (df.groupby(['sex','category'])
   .count().unstack('sex').plot.bar())

使用数据透视表:

 pd.pivot_table(df,index = 'category',
               columns = 'sex',aggfunc ='count').plot.bar()

使用 seaborn:

 import seaborn as sns
sns.countplot(data=df,x='category',hue='sex')

or,
sns.catplot(data=df,kind='count',x='category',hue='sex')

输出

在此处输入图像描述

原文由 BhishanPoudel 发布,翻译遵循 CC BY-SA 4.0 许可协议

IIUC,

 df.groupby(['category','sex']).B.count().unstack().reset_index()\
.plot.bar(x = 'category', y = ['f', 'm'])

在此处输入图像描述

编辑:如果您有多个列,则可以使用 groupby、count 和 droplevel。

 new_df = df.groupby(['category','sex']).count().unstack()
new_df.columns = new_df.columns.droplevel()
new_df.reset_index().plot.bar()

原文由 Vaishali 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题