你如何绘制最大的聚合 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 数据?的主要内容,如果未能解决你的问题,请参考以下文章
pandas使用groupby函数基于指定分组变量对dataframe数据进行分组使用max函数计算所有分组中指定数值变量的聚合最大值即字段在指定分组的最大值([]方括号指定需要计算的数值字段)
Pandas Dataframe groupby 聚合函数和动态列的最大值和最小值之间的差异