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

基于相同小时合并Pandas DataFrames:添加小时均值列问题

解决DataFrame按小时批量填充均值的问题

嘿,我来帮你搞定这个需求!其实用Pandas有好几种简单的方法可以实现,不管你是直接计算均值还是用已经得到的均值表,都能轻松关联匹配。

方法一:直接计算并填充(最省心,不用提前准备均值表)

如果还没提前算好各小时的均值,直接用groupby+transform就能一步到位,它会自动把每个小时的均值广播到对应小时的所有行:

import pandas as pd

# 第一步:确保Timestamp列是datetime格式(如果还没转的话)
df['Timestamp'] = pd.to_datetime(df['Timestamp'])

# 第二步:提取每个时间戳的小时数
df['Hour'] = df['Timestamp'].dt.hour

# 第三步:计算每个小时的均值,并填充到Average列
df['Average'] = df.groupby('Hour')['Value'].transform('mean')

transform的好处是不用额外生成中间表,直接在原DataFrame上添加结果,所有同一小时的行都会自动匹配到该小时的均值。

方法二:用已有的均值表关联匹配

如果你已经有了单独的小时均值表(假设表名叫hour_means,结构是Hour和Average两列),可以用这两种方式关联:

方式A:用merge合并表

# 先提取原数据的小时列
df['Hour'] = df['Timestamp'].dt.hour

# 按Hour列合并两个表,把均值匹配过来
df = df.merge(hour_means, on='Hour', how='left')

how='left'保证原数据的所有行都能保留,不会因为没有匹配到小时而丢失数据。

方式B:用字典映射(更高效)

把均值表转成字典,然后用map快速匹配:

# 把均值表转成{小时: 均值}的字典
mean_dict = hour_means.set_index('Hour')['Average'].to_dict()

# 直接通过小时数映射到均值
df['Average'] = df['Timestamp'].dt.hour.map(mean_dict)

这种方法速度更快,适合数据量比较大的情况。

举个实际例子

假设你的数据是这样的:

TimestampValue
2018-04-12 13:00:0012.0
2018-04-12 12:00:0038.0
2018-04-13 13:00:0014.0
2018-04-13 12:00:0036.0

用方法一处理后,结果会变成:

TimestampValueHourAverage
2018-04-12 13:00:0012.01313.0
2018-04-12 12:00:0038.01237.0
2018-04-13 13:00:0014.01313.0
2018-04-13 12:00:0036.01237.0

完全符合你要的“所有同一小时的行都填入该小时均值”的需求!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:02:51