You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Pandas:如何获取groupby分组内Message最大值对应的Hour?

获取每个月份中消息数量最多的小时(Pandas实现)

嘿,我来帮你搞定这个需求!基于你给出的聚合后数据结构,我用Pandas给你写两种常见场景的实现代码,应该能完美匹配你的需求。


场景1:数据按「月份+小时」分组,统计该时段的消息总数

假设你的DataFrame(命名为df)结构是这样的(这里把数量列改名为msg_count方便理解,你可以换成实际列名):

MonthHourmsg_count
010192
012152
118886
1125

要获取每个月份中消息数最多的小时,直接按Month分组,提取每组中数量最大的行即可:

import pandas as pd

# 核心代码:找到每个月份中数量最大的行
result = df.loc[df.groupby('Month')['msg_count'].idxmax()]

# 只保留Month和Hour列(可选)
result = result[['Month', 'Hour']].reset_index(drop=True)

# 输出结果
print(result)

场景2:数据按「消息类型+月份」分组,统计该类型在当月的数量

如果你的示例里Hour列其实是消息数量(可能列名标注有误),DataFrame结构如下:

MessageMonthHour(实际为数量)
10192
11152
118886
2049

而你需要的是每个月份中,所有消息类型的总数量最大对应的小时,可以先按月份+小时分组求和,再找最大值:

# 第一步:按Month和Hour分组,统计当月该小时的总消息数
hourly_total = df.groupby(['Month', 'Hour'])['Message'].sum().reset_index()

# 第二步:找到每个月份中总数量最大的Hour
result = hourly_total.loc[hourly_total.groupby('Month')['Message'].idxmax()]

# 筛选需要的列
result = result[['Month', 'Hour']]
print(result)

补充:处理并列最大值的情况

如果某个月份里有多个小时的消息数量并列第一,上面的idxmax()只会返回第一个出现的行。若需要保留所有并列的行,可以用transform方法:

# 获取每个月份的最大消息数
max_counts = hourly_total.groupby('Month')['Message'].transform('max')

# 筛选出所有等于当月最大数的行
result = hourly_total[hourly_total['Message'] == max_counts]

这样就能完美解决你的问题啦!

内容的提问来源于stack exchange,提问作者user3595632

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:04:28