在熊猫中的groupby对象中绘制每个组的大小

时间:2018-07-31 17:42:31

标签: python pandas dataframe matplotlib group-by

我有一个数据框,下面的代码为我提供了两个“分支” 0和1之一的每个性别的交易次数。因此,假设我们有以下groupby对象

data.groupby(['branch','gender']).agg(np.size)['count']
branch      gender
0           FEMALE    1317771
            MALE      1214686
1           FEMALE     254173
            MALE       179210
Name: count, dtype: int64

之所以这样做,是因为我想创建一个条形图,以显示每个性别和分支机构的交易数量。

这是我的工作方式:F和M代表女性和男性。

plt.bar([0,1,2,3,],data.groupby(['end_reason','gender']).agg(np.size)['listener_id'],align='center')
plt.xticks(range(4),['F_0','M_0','F_1','M_1'])
plt.title("Number of transactions per gender and branch")

问题是我确信这不是正确的方法,因为我必须自己对标签进行硬编码。我认为可能会有更好的方法,因为想象我们有更多的组,并且很难在xticks中对所有的组组合进行硬编码。谢谢

1 个答案:

答案 0 :(得分:1)

如果我对您的理解正确并且您的df是这样的话:

   branch  gender  listener_id
0       0    male            1
1       0    male            3
2       1  female            2
3       1  female            4
4       1    male            1

您可以这样做:

import matplotlib
import matplotlib.pyplot as plt
matplotlib.style.use('ggplot')
df.groupby(['branch','gender']).agg(np.size)['listener_id'].unstack().plot(kind='bar')
plt.show()

并具有: enter image description here