基于日期计算过去7天AcuteLegs负荷总和的Python问题
解决日期缺失时的7天负荷总和计算问题
针对需求中缺失日期需按0计入7天总和的要求,我们需要先补全完整日期序列,再基于时间窗口计算滚动总和,具体步骤如下:
步骤1:标准化日期格式与索引
先将Date列转换为datetime类型,并设置为DataFrame索引,为后续日期操作做准备:
import pandas as pd # 假设原始数据存储在df中 df['Date'] = pd.to_datetime(df['Date']) df = df.set_index('Date')
步骤2:补全缺失日期
生成从数据最小日期到最大日期的完整每日序列,并用0填充缺失日期的AcuteLegs_1day值:
# 生成覆盖所有日期的完整序列 full_date_range = pd.date_range(start=df.index.min(), end=df.index.max(), freq='D') # 重新索引,缺失日期的负荷值填充为0 df_full = df.reindex(full_date_range, fill_value=0)
步骤3:计算符合要求的7天总和
使用时间窗口滚动求和,设置window='7D'指定7天周期,closed='left'确保计算当前日期**之前7天(不含当天)**的总和,与你原代码shift(1)的逻辑对齐:
df_full['AcuteLegs_7days'] = df_full['AcuteLegs_1day'].rolling(window='7D', closed='left').sum()
步骤4:还原原始数据的日期行
最后筛选出原始数据中存在的日期,得到最终结果:
# 还原回原始日期的记录,并重置索引 df_final = df_full.loc[df.index].reset_index().rename(columns={'index': 'Date'})
结果验证
以2021-12-13为例,过去7天覆盖2021-12-06至2021-12-12,其中12-06至12-08无数据(按0计算),12-09为450、12-10为840,12-11至12-12为0,总和为1290,这就是2021-12-13对应的AcuteLegs_7days值。
内容的提问来源于stack exchange,提问作者E Jager de
相关产品推荐
相关产品推荐

