你如何绘制最大的聚合 groupby 数据?

Posted

技术标签:

【中文标题】你如何绘制最大的聚合 groupby 数据?【英文标题】:How do you bar plot the nlargest of aggregated groupby data? 【发布时间】:2020-12-21 18:27:29 【问题描述】:

我确信这个问题已经在某个地方得到了回答,但我对 pandas 不是很好,需要有人为我分解它。

我有这个功能:

def process_data(data):
    data = data[data['Bucket Number'] == 25.0].groupby(['Activity Month', 'Agent Sign']).agg('Total Ping Current Forecast': [np.sum])
    return data

编辑:固定样本

产生这个输出:

                          Total Ping Current Forecast
                                                  sum
Activity Month Agent Sign                            
202001         CRCDIF                        618485.0
               CRCTLD                      47746137.0
               DFW1DF                      16220228.0
               HDQ9LO                         19995.0
               HDQBDE                         10739.0
...                                               ...
202007         HDQRPT                             0.0
               HDQZED                             0.0
               MSCUHD                             0.0
               RDUSMD                         56732.0
               Various                  245079251.0

如何制作一个条形图,其中 X 轴是 Activity Month,Y 轴是总和,每个刻度是两个最大的 Agent Sign 条形图?

例如,202001 的刻度线将有两个柱,一个用于Agent Sign CRCTLD,一个用于 DFW1DF。

【问题讨论】:

【参考方案1】:

让我们尝试使用groupby().cumcount 提取行(也可以使用nlargest),然后使用sns.barplot() 进行绘图:

processed = process_data(data)

sns.barplot(data=processed.sort_values('sum',ascending=False)
                     .assign(rank=lambda x: x.groupby(level=0).cumcount())
                     .reset_index()
                     .loc[lambda x: x['rank']<=1],
            x='Activity Month',y='sum', hue='rank'     
           )

输出:

【讨论】:

我收到一条错误消息,上面写着Dataframe object has no attribute to_frame。当我取出 to_frame() 时,我得到一个 KeyError for 'sum'。 只需删除to_frame,因为您已经有一个数据框。查看更新的答案。 我做到了。我收到sum 的关键错误。我没有名为 sum 的列,这正是我调用 .agg('Total Ping Current Forecast' :[np.sum]) 时返回的内容 是的,忘了说data这里是process_data(data)的输出。 是的,这是我正在使用的输出。但是我得到了in _get_label_or_level_values raise KeyError(key) KeyError: 'sum',因为我不认为sum 实际上是数据框中的一个系列,对吧?

以上是关于你如何绘制最大的聚合 groupby 数据?的主要内容,如果未能解决你的问题,请参考以下文章

获取熊猫 groupby 对象中多列的最大聚合

pandas使用groupby函数基于指定分组变量对dataframe数据进行分组使用max函数计算所有分组中指定数值变量的聚合最大值即字段在指定分组的最大值([]方括号指定需要计算的数值字段)

Pandas Dataframe groupby 聚合函数和动态列的最大值和最小值之间的差异

MySQL 数据库学习

在 groupby().count() 之后无法进行命名聚合

在数据框中绘制聚合分组