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

基于Datetime Index合并Pandas DataFrame并按12小时填充列

解决12小时间隔合并与填充的方案

我来帮你搞定这个每12小时维度的合并与填充问题~核心思路是把两个DataFrame的时间都对齐到12小时的时间区间上,完成匹配后再填充间隔值,具体步骤如下:

1. 为两个DataFrame生成统一的12小时区间标识

首先要让df(带DatetimeIndex)和df2(含12小时列)拥有可匹配的时间分组键:

处理df的DatetimeIndex

利用floor('12H')把每个时间点向下取整到最近的12小时节点(0点或12点),生成新的区间列:

# 为df添加12小时区间列
df['12h_interval'] = df.index.floor('12H')

处理df2的12小时列

先确保df2的12小时列是datetime类型,再同样用floor('12H')统一格式:

# 先转换为datetime类型(如果还不是的话)
df2['12h_interval'] = pd.to_datetime(df2['你的12小时列名']).floor('12H')

2. 基于12小时区间+short_id合并

和你之前整日期合并的逻辑一致,只是把关联键换成['12h_interval', 'short_id'],推荐用left合并来保留df的所有时间点:

df_merged = pd.merge(df, df2, on=['12h_interval', 'short_id'], how='left')

3. 填充12小时间隔之间的值

合并后,非12小时节点的行会出现NaN,用ffill()(向前填充,用上一个12小时的值覆盖)或bfill()(向后填充)补全,也可以用线性插值实现更平滑的填充:

# 向前填充(常用方案)
df_final = df_merged.ffill()

# 或者线性插值(适合数值型列)
df_final = df_merged.interpolate(method='linear')

举个实际例子

假设df的结构:

short_id  value
2024-05-20 01:00:00        A      10
2024-05-20 06:00:00        A      15
2024-05-20 13:00:00        A      20
2024-05-20 18:00:00        A      25

df2的结构:

12h_col  short_id  12h_value
2024-05-20 00:00:00        A         100
2024-05-20 12:00:00        A         200

经过上述步骤处理后,最终的df_final会变成:

short_id  value 12h_interval          12h_col  12h_value
2024-05-20 01:00:00        A      10 2024-05-20 00:00:00 2024-05-20 00:00:00         100
2024-05-20 06:00:00        A      15 2024-05-20 00:00:00 2024-05-20 00:00:00         100
2024-05-20 13:00:00        A      20 2024-05-20 12:00:00 2024-05-20 12:00:00         200
2024-05-20 18:00:00        A      25 2024-05-20 12:00:00 2024-05-20 12:00:00         200

额外注意点

  • 如果df2的12小时列是字符串格式,一定要先通过pd.to_datetime()转换为datetime类型,否则无法匹配。
  • 多组short_id的场景下,这个方案依然有效,因为合并时会自动按short_id分组匹配对应的12小时区间值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:00:58