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

求助:如何用前一天同一时间的数据填充Pandas缺失值?

用前一天同一时间数据填充Pandas缺失值的解决方案

嘿,我看你尝试用前一天同一时刻的数据填充DataFrame里的缺失值,但原代码没达到预期——这是因为你直接用当日的时间戳去匹配前一天的时间戳,两者时间节点完全不同,map自然找不到对应的值。咱们来调整下逻辑:

问题分析

你的核心需求是:当某一天的某个时间点Value为空时,用前一天同一时间点的Value来填充。原代码的问题在于,你用缺失值的DateTime(比如10-01-2016 02:00)去映射前一天的DateTime(09-01-2016 02:00),这两个是完全不同的时间戳,根本匹配不到数据。

正确实现方案

我们需要先把缺失值对应的时间减去一天,得到前一天的同一时间点,再用这个时间点去查找对应的值来填充。下面是具体代码:

import pandas as pd

# 读取数据,注意指定日期格式为DD-MM-YYYY HH:MM,避免解析错误
df = pd.read_csv('input_3.csv')
df['DateTime'] = pd.to_datetime(df['DateTime'], format='%d-%m-%Y %H:%M')

# 将DateTime设置为索引,方便按时间查找数据
df = df.set_index('DateTime')

# 填充缺失值:对每个缺失的Value,用前一天同一时间的值替换
df['Value'] = df['Value'].fillna(
    # 把缺失值对应的索引(时间)减去一天,得到前一天的时间
    df.index - pd.Timedelta(days=1)
    # 用这个时间去索引原DataFrame的Value,得到对应的值
).map(df['Value'])

# 重置索引(如果需要回到原来的结构)
df = df.reset_index()

print(df)

验证结果

用你提供的测试数据运行这段代码后,今日的缺失值会被正确填充:

  • 10-01-2016 02:00的缺失值会被填充为09-01-2016 02:00的4
  • 10-01-2016 03:00的缺失值会被填充为09-01-2016 03:00的5

如果你的预期结果是填充前一天的下一个小时数据(比如今日02:00用昨日03:00的值),只需要把pd.Timedelta(days=1)改成pd.Timedelta(days=1, hours=1)即可,根据实际需求调整时间偏移量。

另一种实现方式(用apply逐行处理)

如果你更习惯用apply逐行处理,也可以这样写:

import pandas as pd

df = pd.read_csv('input_3.csv')
df['DateTime'] = pd.to_datetime(df['DateTime'], format='%d-%m-%Y %H:%M')

# 创建一个前一天同一时间的临时列
df['prev_day_time'] = df['DateTime'] - pd.Timedelta(days=1)

# 构建前一天时间到Value的映射字典
prev_day_map = df.set_index('DateTime')['Value'].to_dict()

# 逐行填充缺失值
df['Value'] = df.apply(
    lambda row: prev_day_map.get(row['prev_day_time'], row['Value'])
    if pd.isna(row['Value']) else row['Value'],
    axis=1
)

# 移除临时列
df = df.drop('prev_day_time', axis=1)

print(df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:53:49