简体   繁体   English

Pandas groupby 两列并绘制

[英]Pandas groupby two columns and plot

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()

But this gives:但这给出了: 在此处输入图片说明

How to get the count of sex per category?如何获得每个类别的性别数?

Various Methods of Groupby Plots Groupby 图的各种方法

Data数据

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

Using crosstab使用交叉表

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

Using groupby+unstack:使用 groupby+unstack:

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

Using pivot_table:使用pivot_table:

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

Using seaborn:使用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输出

在此处输入图片说明

IIUC,国际大学联盟,

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

在此处输入图片说明

Edit: If you have multiple columns, you can use groupby, count and droplevel.编辑:如果您有多个列,则可以使用 groupby、count 和 droplevel。

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

You can also use this你也可以用这个

pd.pivot_table(df, values = 'B', index = 'category', columns = 'sex',
               aggfunc = lambda x: len(x)).plot.bar()

which results in exactly the same plot.这导致完全相同的情节。

在此处输入图片说明

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM