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

如何用Pandas扩展日期范围并对多组数据进行向前填充?

解决方案

步骤说明

  1. 转换日期格式:将原始DataFrame的DATE列转为datetime类型,方便后续日期范围生成和匹配。
  2. 构建日期映射:按原始日期分组,保存每个日期对应的所有行数据。
  3. 生成完整日期序列:基于原始数据的最小、最大日期,生成连续的每日日期序列。
  4. 向前填充行数据:对每个连续日期,匹配最近的、不晚于当前日期的原始日期,复用其对应的行数据并替换为当前日期。
  5. 格式还原:将结果的DATE列转回原始的日/月/年字符串格式。

完整代码

import pandas as pd

# 构建原始DataFrame
data = {
    'DATE': ['01/09/2022', '01/09/2022', '01/09/2022', '05/09/2022', '05/09/2022', '07/09/2022'],
    'MIN_AMOUNT': [10, 15, 30, 10, 15, 15],
    'MAX_AMOUNT': [20, 25, 50, 20, 25, 25],
    'MIN_DAY': [1, 4, 7, 1, 4, 4],
    'MAX_DAY': [2, 5, 10, 2, 5, 5]
}
df = pd.DataFrame(data)

# 转换DATE列为datetime类型(格式:日/月/年)
df['DATE'] = pd.to_datetime(df['DATE'], format='%d/%m/%Y')

# 获取排序后的原始唯一日期
original_dates = sorted(df['DATE'].unique())
# 生成完整的连续日期序列
full_date_range = pd.date_range(start=original_dates[0], end=original_dates[-1], freq='D')

# 建立原始日期到对应行数据的映射(去掉DATE列,后续统一赋值)
date_to_rows = {date: df[df['DATE'] == date].drop('DATE', axis=1) for date in original_dates}

# 生成结果列表
result_rows = []
for current_date in full_date_range:
    # 找到最近的不晚于当前日期的原始日期
    matched_date = max(d for d in original_dates if d <= current_date)
    # 复制对应行数据并替换日期
    temp_df = date_to_rows[matched_date].copy()
    temp_df['DATE'] = current_date
    result_rows.append(temp_df)

# 合并所有结果并重置索引
result_df = pd.concat(result_rows, ignore_index=True)

# 将DATE列转回原始字符串格式
result_df['DATE'] = result_df['DATE'].dt.strftime('%d/%m/%Y')

# 打印结果(无索引)
print(result_df.to_string(index=False))

输出验证

运行代码后,输出结果与期望格式完全一致,自动填充缺失日期的行数据,并保留对应日期的行结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 23:15:41