如何在Pandas中补全时间序列DataFrame的缺失周结束日期
实现方案
你可以通过分组计算周偏移量的方式完成填充,完整可运行代码如下:
import pandas as pd import numpy as np # 构造示例数据,实际使用时替换为你自己的DataFrame即可 data = { 'Week_Ending': ['8/5/2021', '8/12/2021', '8/19/2021', np.nan, np.nan], 'Sales': [1000, 1122, 980, 1000, 1234] } df = pd.DataFrame(data) # 1. 将Week_Ending列转为datetime类型,这是日期运算的基础 df['Week_Ending'] = pd.to_datetime(df['Week_Ending']) # 2. 计算每个行距离所在分组第一个有效日期的周偏移量 week_offset = df.groupby(df['Week_Ending'].notna().cumsum()).cumcount() # 3. 前向填充有效日期后,加上偏移量对应的天数完成填充 df['Week_Ending'] = df['Week_Ending'].ffill() + pd.to_timedelta(week_offset * 7, unit='d') # 如需转回「月/日/年」的字符串格式,可执行下方代码 df['Week_Ending'] = df['Week_Ending'].dt.strftime('%m/%d/%Y')
代码说明
- 你之前使用
interpolate没有生效,大概率是因为Week_Ending列还是字符串类型,只有转换为datetime类型后才能进行日期相关的运算和插值。 df['Week_Ending'].notna().cumsum()会给每一组「有效日期+后续连续缺失值」分配相同的分组ID,cumcount()会统计每个行在组内的序号,以此作为周偏移的依据。- 该方案兼容任意长度的连续缺失值,自动按每周7天的规则向后递推。
内容的提问来源于stack exchange,提问作者etuo
相关产品推荐
相关产品推荐

