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

Pandas按小时分组计算日期后数据的求和与均值问题

Pandas按小时分组聚合并匹配回原DataFrame的解决方案

嘿,我懂你遇到的问题了——想按日期的小时维度分组,计算组内的聚合值(看你示例里的Sum像是组内记录数,也可以换成某列求和,方法通用)和第2列的均值,再把这些结果对应到原表的每一行对吧?

你之前的代码出错是因为groupby().sum()返回的是每个小时一行的聚合结果,它的索引是小时数,和原DataFrame的行索引完全不匹配,直接赋值肯定会出对齐错误。解决这个问题的核心是用transform()方法,它会把组内的聚合结果自动广播到组内的每一行,完美匹配原表的行数。

具体步骤和代码

首先确保你的日期列(第5列)是datetime类型,如果还不是的话先转换:

df[5] = pd.to_datetime(df[5])

然后用transform计算聚合值并匹配回原表:

# 计算组内求和(如果是组内记录数用'count',如果是某列求和比如第3列就写[3].transform('sum'))
df['Sum'] = df.groupby(df[5].dt.hour).transform('count')

# 计算第2列的组内均值
df['Average'] = df.groupby(df[5].dt.hour)[2].transform('mean')

完整示例(模拟你的数据)

import pandas as pd

# 模拟你提供的示例数据
data = {
    2: [29, 29, 66, 66, 63, 63, 43, 43],
    3: [12, 12, 5, 5, 5, 5, 8, 8],
    4: [296, 296, 646, 646, 596, 596, 655, 655],
    5: pd.to_datetime([
        '2017-01-01 01:00:07.500',
        '2017-01-01 01:00:07.500',
        '2017-01-01 01:00:31.410',
        '2017-01-01 01:00:31.410',
        '2017-01-01 02:00:32.670',
        '2017-01-01 02:00:32.670',
        '2017-01-01 03:00:36.720',
        '2017-01-01 03:00:36.720'
    ])
}
df = pd.DataFrame(data)

# 执行聚合并匹配到原表
df['Sum'] = df.groupby(df[5].dt.hour).transform('count')
df['Average'] = df.groupby(df[5].dt.hour)[2].transform('mean')

# 查看结果
print(df)

运行后得到的结果就和你期望的完全一致了——同一小时内的所有行都会拥有相同的Sum和Average值,完美对应到每一行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:16:46