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

重采样缺失日期,前向填充DataFrame多列但保留Type列空白

没问题,这个需求用Pandas几步就能实现,我给你写好代码并解释清楚:

实现步骤与代码

核心思路

先把日期列转为可处理的datetime格式,生成连续的日期序列,再通过重新索引+向前填充实现非日期列的继承,最后单独处理Type列让缺失行留空。

import pandas as pd

# 你的原始数据
raw_data = {
    'No': [20, 20, 20, 20, 20],
    'FlNo': [1826, 1112, 1234, 43, 1840],
    'DATE': ['6/1/2017', '6/4/2017', '6/6/2017', '6/7/2017', '6/8/2017'],
    'Loc': ['AAA', 'BBB', 'CCC', 'DDD', 'EEE'],
    'Type': ['O', 'O', 'O', 'O', 'O']
}
df = pd.DataFrame(raw_data)

# 1. 把DATE列转为datetime类型,方便后续日期处理
df['DATE'] = pd.to_datetime(df['DATE'])

# 2. 生成从原数据最早到最晚日期的连续日期序列
full_date_range = pd.date_range(start=df['DATE'].min(), end=df['DATE'].max())

# 3. 重新索引到连续日期,并用向前填充处理非日期列
df = df.set_index('DATE').reindex(full_date_range)
# 对No/FlNo/Loc列用上一行的值填充
df[['No', 'FlNo', 'Loc']] = df[['No', 'FlNo', 'Loc']].ffill()
# Type列只保留原始有值的行,缺失行设为空字符串
df['Type'] = df['Type'].where(df['Type'].notna(), '')

# 4. 重置索引,把DATE列恢复为普通列,并转回你想要的日期格式
df = df.reset_index().rename(columns={'index': 'DATE'})
df['DATE'] = df['DATE'].dt.strftime('%m/%d/%Y')

# 查看结果
print(df)

关键细节说明

  • pd.to_datetime:将字符串日期转为Pandas可识别的日期类型,是生成连续日期的前提。
  • ffill():全称forward fill,会自动用上一行的有效值填充当前空值,完美匹配你“非日期列继承上一行值”的需求。
  • df['Type'].where(...):精准控制Type列只有原始数据行保留值,填充出来的新行全部留空,和你给出的示例格式完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:03:28