重采样缺失日期,前向填充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
相关产品推荐
相关产品推荐

