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

Posted

技术标签:

【中文标题】在 Pandas 的 groupby 对象中绘制每个组的大小【英文标题】:Plot the size of each group in a groupby object in Pandas 【发布时间】:2019-01-08 04:35:44 【问题描述】:

我有一个数据框,下面的代码为我提供了两个“分支”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 中的所有组组合是不切实际的。谢谢

【问题讨论】:

你能创建一个minimal reproducible example 吗? 【参考方案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()

并且有:

【讨论】:

以上是关于在 Pandas 的 groupby 对象中绘制每个组的大小的主要内容,如果未能解决你的问题,请参考以下文章

绘制 Pandas DataSeries.GroupBy

逻辑矩阵的 Pandas Groupby 条形图

pandas GroupBy 绘制每个组

Pandas GroupBy 的绘图结果

使用 Pandas 在同一图中绘制分组数据

在 Pandas 中绘制总和和平均值时出错