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

如何按小时与星期几分组Pandas DataFrame统计文本数量?

按星期几+小时分组统计文本总数的Pandas实现

问题描述

我有一个包含月度文本数据及时间戳的Pandas DataFrame,数据格式如下:

timestamp              text
2023-01-01 00:00:00    ABC
2023-01-01 00:00:01    DEF
2023-01-01 00:00:01    GHI
...

需要统计每周每一天中每个小时的文本总数,最终得到24×7=168个统计值——比如将所有周日10点-11点的文本数累加,所有周一同一时段的文本数累加,以此类推覆盖一周7天的24个小时。

此前尝试按小时分组后仅按day_of_week统计,会丢失小时维度信息,只能得到7条结果,需要同时结合星期几和小时进行分组统计。

解决方案

方法一:直接从原DataFrame一步分组统计

利用Pandas的dt属性提取星期几(dayofweek,0=周一,6=周日)和小时(hour)两个维度,直接分组求和,无需中间步骤:

# 按星期几+小时分组,统计文本总数
result = df.groupby([
    df["timestamp"].dt.dayofweek,
    df["timestamp"].dt.hour
])["text"].count().reset_index(name="total_count")

# 重命名列名,提升可读性
result.rename(columns={"timestamp": "day_of_week"}, inplace=True)

执行后result会包含168行数据,每行对应day_of_week(0-6)与hour(0-23)的唯一组合,以及该组合下的累计文本总数。

方法二:基于已生成的hours_df二次分组

如果需要沿用你已经创建的hours_df,只需在groupby中同时传入day_of_week和小时字段,对小时级统计值求和:

# 从hours_df的timestamp中提取小时,与day_of_week共同分组
day_hour_df = hours_df.groupby([
    "day_of_week",
    hours_df["timestamp"].dt.hour
])["count_hours"].sum().reset_index(name="total_count")

# 重命名小时列
day_hour_df.rename(columns={"timestamp": "hour"}, inplace=True)

可选优化:将星期数字转换为中文名称

如果需要更直观的星期名称展示,可以添加映射转换:

weekday_mapping = {0: "周一", 1: "周二", 2: "周三", 3: "周四", 4: "周五", 5: "周六", 6: "周日"}
result["day_name"] = result["day_of_week"].map(weekday_mapping)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 14:43:09