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

如何在R中为各节点补全2022年每小时的日期记录?

解决方法

假设你的DataFrame结构包含node(节点列)、datetime(已转为日期时间格式的小时列)和数值列(比如hourly_mean),可以用以下两种方法补全缺失的小时行:

方法一:构建完整索引后重采样

  1. 生成2022年全年的完整小时时间序列:
import pandas as pd

# 创建2022年所有小时的时间序列
full_hours = pd.date_range(start='2022-01-01 00:00:00', end='2022-12-31 23:00:00', freq='H')
  1. 提取所有唯一节点,构建「节点-时间」的完整多级索引:
# 获取所有不重复的节点
unique_nodes = df['node'].unique()
# 生成每个节点对应所有小时的笛卡尔积索引
full_multi_index = pd.MultiIndex.from_product(
    [unique_nodes, full_hours],
    names=['node', 'datetime']
)
  1. 重索引原DataFrame补全缺失行:
# 给原数据设置多级索引,对齐完整索引
df = df.set_index(['node', 'datetime'])
# 重索引后缺失的数值会显示为NaN,最后重置索引回到普通结构
df_full = df.reindex(full_multi_index).reset_index()

方法二:按节点分组后重采样

这种方法更简洁,利用groupby+resample自动补全每个节点的小时数据:

# 将datetime设为索引,按节点分组后按小时重采样
df_full = df.set_index('datetime').groupby('node').resample('H').asfreq().reset_index()

补充:缺失值填充

如果需要对缺失的均值进行填充,可以根据业务需求选择方式:

  • 填充为0:df_full['hourly_mean'] = df_full['hourly_mean'].fillna(0)
  • 前向填充(用上一个非缺失值填充):df_full['hourly_mean'] = df_full['hourly_mean'].ffill()
  • 后向填充:df_full['hourly_mean'] = df_full['hourly_mean'].bfill()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 04:52:48