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

使用Pandas按组补全小时级缺失日期并填充前值

使用Pandas按组补全小时级缺失日期并填充前值

完全可以用Pandas实现该需求,核心思路是按分组生成连续的小时时间序列,再通过前向填充补全缺失列值。以下是具体实现步骤和代码:

步骤说明

  1. 转换日期列类型:将原始字符串格式的date列转为datetime类型,这是生成连续时间序列的前提。
  2. 按组生成完整时间序列:针对每个group,基于组内的最早和最晚日期,生成小时级的连续时间索引,再将原数据与该索引合并,补全缺失的时间点。
  3. 前向填充缺失值:对indicator和value列使用前向填充(ffill),用前一行的有效值填充缺失行。

完整代码

import pandas as pd

# 原始数据
data = [['A', '2022-09-01 10:00:00', False, 2], ['A', '2022-09-01 14:00:00', False, 3],
        ['B', '2022-09-01 13:00:00', False, 1], ['B', '2022-09-01 16:00:00', True, 4]]
df = pd.DataFrame(data=data, columns=['group', 'date', 'indicator', 'value'])

# 1. 转换日期列为datetime类型
df['date'] = pd.to_datetime(df['date'])

# 2. 定义分组补全时间序列的函数
def fill_hours(group):
    # 生成组内从最早到最晚的小时级连续时间索引
    idx = pd.date_range(start=group['date'].min(), end=group['date'].max(), freq='H')
    # 将原数据按date设为索引,重新对齐到完整时间序列
    group = group.set_index('date').reindex(idx)
    # 补全group列的缺失值(保持分组标识)
    group['group'] = group['group'].ffill()
    return group

# 应用分组函数并重置索引
df_filled = df.groupby('group').apply(fill_hours).reset_index(drop=False).rename(columns={'index': 'date'})

# 3. 前向填充indicator和value列的缺失值
df_filled[['indicator', 'value']] = df_filled[['indicator', 'value']].ffill()

# 输出结果
print(df_filled)

运行上述代码后,输出结果将与你提供的df_desired完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 06:05:28