使用Pandas按组补全小时级缺失日期并填充前值
使用Pandas按组补全小时级缺失日期并填充前值
完全可以用Pandas实现该需求,核心思路是按分组生成连续的小时时间序列,再通过前向填充补全缺失列值。以下是具体实现步骤和代码:
步骤说明
- 转换日期列类型:将原始字符串格式的
date列转为datetime类型,这是生成连续时间序列的前提。 - 按组生成完整时间序列:针对每个
group,基于组内的最早和最晚日期,生成小时级的连续时间索引,再将原数据与该索引合并,补全缺失的时间点。 - 前向填充缺失值:对
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
相关产品推荐
相关产品推荐

