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

按星期几与小时分组计算Pandas文本数量均值的问题

问题

我已经用以下代码按星期几(day_of_week)和小时(hour)分组统计了各时段的文本数量:

time_df = df.groupby(
    [
        df["timestamp"].dt.dayofweek.rename("day_of_week"),
        df["timestamp"].dt.hour.rename("hour")
    ]
).size().reset_index(name="count")

得到的time_df包含day_of_week、hour、count三列。现在需要计算各时段的文本数量均值:比如day_of_week为0(周一)时,用该时段的count除以当月周一的天数。但直接把size()改成mean()时报错:

TypeError: agg function failed [how->mean,dtype->object]

我尝试在原始DataFrame中添加day_of_week列,通过统计同值分组的数量来计算均值,但不知道具体怎么实现。

补充说明
原始DataFrame包含timestamp和text列,已添加day_of_week列。希望最终得到包含day_of_week、hour、count、num_of_day_of_week、mean列的DataFrame,例如周一0点的count为21195,当月有4个周一,则均值为21195/4=5298.75。

解决方案

核心思路是先统计当月每种星期几的实际天数,再和时段统计结果关联计算均值,具体步骤如下:

步骤1:统计当月各星期几的天数

从原始数据中提取月份维度,分组统计每个月内每种星期几的天数:

# 提取YYYY-MM格式的月份,用于按月份统计星期几天数
df['month'] = df['timestamp'].dt.to_period('M')

# 统计每个月中,每种星期几的真实天数(去重同一天的重复记录)
day_counts = df.groupby(['month', 'day_of_week'])['timestamp'].dt.date.nunique().reset_index(name='num_of_day_of_week')

步骤2:带月份维度统计时段文本数量

调整分组维度,加入月份,确保后续能和星期几天数数据对应:

# 按月份、星期几、小时分组,统计各时段文本总数
time_with_month_df = df.groupby(
    ['month', 'day_of_week', 'hour']
).size().reset_index(name='count')

步骤3:关联数据并计算均值

将两个结果表关联,通过除法得到各时段的日均文本数量:

# 按月份和星期几关联时段统计与天数统计数据
result_df = pd.merge(time_with_month_df, day_counts, on=['month', 'day_of_week'], how='left')

# 计算均值
result_df['mean'] = result_df['count'] / result_df['num_of_day_of_week']

可选:合并多月份同时段数据

如果需要合并不同月份的同星期几-小时组合数据,计算整体均值:

final_df = result_df.groupby(['day_of_week', 'hour']).agg(
    total_count=('count', 'sum'),
    total_days=('num_of_day_of_week', 'sum'),
    mean=('mean', 'mean')
).reset_index()

注:直接替换size()为mean()报错的原因是,mean()需要对分组内的数值列计算平均值,而你的需求是基于星期几的天数做除法,并非对分组内的文本数量求平均,因此不能直接替换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 14:47:17