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

Pandas按每日各小时分组统计列中Top5高频值实现方法

Pandas按小时分组取B列Top5高频值实现

问题背景

现有Pandas数据集样例如下:

DateAB
2021-05-06 12.0018.50
2021-05-06 13.0020.39.7%
2021-05-06 14.0016.1-20.7%
2022-05-06 10.0050.44.0%
2022-05-06 11.0052.43.9%

需求:按一天中的小时维度分组,提取每个分组下B列出现频率最高的最多5个值;若分组下B列不同值不足5个,返回实际存在的所有高频值,最终输出格式参考如下示例:

hourmost common value
0.00+3%, 7%, -9%, 0.5%, 18%
12.00+6%, -3%, 4%
13.001, 4%

实现代码

核心逻辑

  1. 先将字符串格式的Date列解析为标准时间类型,提取和输出格式一致的小时字段
  2. 按小时分组,对每个分组的B列做频次统计,取频次最高的前5个值拼接为字符串
  3. 频次统计方法自动处理分组内值不足5个的场景,无需额外写判断逻辑

可直接运行的代码

import pandas as pd

# 解析时间字段,提取符合输出格式的小时列
df['Date'] = pd.to_datetime(df['Date'], format='%Y-%m-%d %H.%M')
df['hour'] = df['Date'].dt.strftime('%H.00')

# 定义分组统计TopN高频值的函数
def get_topn_common(series, top_n=5):
    top_values = series.value_counts().head(top_n).index.tolist()
    return ', '.join(map(str, top_values))

# 分组计算得到最终结果
result = df.groupby('hour', as_index=False)['B'].apply(get_topn_common)
result.columns = ['hour', 'most common value']

结果说明

用提供的样例数据运行上述代码,输出结果如下(因样例中每个小时仅1条数据,所以每个分组仅返回1个值,符合不足5个返回实际值的要求):

hourmost common value
10.004.0%
11.003.9%
12.000
13.009.7%
14.00-20.7%

如果需要过滤空值,只需要在get_topn_common函数开头增加series = series.dropna()即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 04:15:55