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

使用Python Pandas补全缺失日期并重复对应行数据

Pandas补全日期缺失并重复对应ID数据的解决方案

问题背景

给定如下初始DataFrame:

import pandas as pd

data = {'Date': ['1-Dec-23', '1-Dec-23', '1-Dec-23', '5-Dec-23', '5-Dec-23', '5-Dec-23'],
        'Balance': [10, 20, 1000, 50, 100, 200],
        'ID': [1, 2, 3, 1, 2, 3]}

df = pd.DataFrame(data)

需要补全2023-12-02至2023-12-04的缺失日期,且这些日期下每个ID的Balance数据沿用前一个有效日期(2023-12-01)的值,最终得到指定格式的输出。

实现代码

import pandas as pd

# 初始化数据
data = {'Date': ['1-Dec-23', '1-Dec-23', '1-Dec-23', '5-Dec-23', '5-Dec-23', '5-Dec-23'],
        'Balance': [10, 20, 1000, 50, 100, 200],
        'ID': [1, 2, 3, 1, 2, 3]}
df = pd.DataFrame(data)

# 1. 将日期列转换为datetime格式,方便时间序列处理
df['Date'] = pd.to_datetime(df['Date'], format='%d-%b-%y')

# 2. 生成从最小日期到最大日期的完整日期序列
full_date_range = pd.date_range(start=df['Date'].min(), end=df['Date'].max(), freq='D')

# 3. 构建日期与ID的笛卡尔积,确保每个日期下所有ID都有记录
unique_ids = df['ID'].unique()
full_multi_index = pd.MultiIndex.from_product([full_date_range, unique_ids], names=['Date', 'ID'])

# 4. 重新索引并前向填充缺失的Balance数据
result_df = df.set_index(['Date', 'ID']).reindex(full_multi_index).ffill().reset_index()

# 5. 将Date设为索引,匹配指定输出格式
result_df = result_df.set_index('Date')

# 查看结果
print(result_df)

代码说明

  • 日期格式转换:把字符串类型的日期转为datetime,是时间序列处理的基础。
  • 完整日期序列:生成覆盖起始到结束日期的每日序列,确保没有遗漏日期。
  • 笛卡尔积索引:保证每个日期下都包含所有ID,避免出现某日期缺少部分ID的情况。
  • 前向填充(ffill):对于缺失的Balance值,自动沿用该ID最近的有效数据,正好符合需求中缺失日期使用12-01数据的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 09:43:19