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

如何扩展Pandas DataFrame使列起始为日历周周一?

高效扩展Pandas日期列至完整日历周起始的方法

现有一个以日期为列索引的Pandas DataFrame,其首个日期并非周一,需要前置若干列将起始日期调整为最近的周一,新增列的所有数据值设为0.0。示例初始化代码如下:

# Imports
import numpy as np  # version 1.20.3
import pandas as pd  # version 1.3.4  

# Dataframe initialization
np.random.seed(0)
col_idx = pd.date_range(start="2022-12-22", end="2023-01-15", freq="D")
data = np.random.rand(5, len(col_idx))
df = pd.DataFrame(data, columns=col_idx)

高效实现方案

核心思路是批量生成需要新增的日期列,构造全0值的DataFrame后与原数据合并,避免逐列插入的低效操作:

# 获取原DataFrame的首个日期
first_date = df.columns[0]

# 计算最近的周一:weekday()返回0=周一,通过时间差调整起始日期
days_to_monday = first_date.weekday()
start_monday = first_date - pd.Timedelta(days=days_to_monday)

# 生成需新增的日期范围(从周一到原首日期前一天)
new_columns = pd.date_range(start=start_monday, end=first_date - pd.Timedelta(days=1), freq="D")

# 构造全0的新增列DataFrame
additional_df = pd.DataFrame(0.0, index=df.index, columns=new_columns)

# 合并两个DataFrame,新增列置于左侧
df_extended = pd.concat([additional_df, df], axis=1)

关键说明

  • 日期计算逻辑:通过weekday()获取日期对应的星期序号(周一为0),用Timedelta计算出需要回溯的天数,得到最近的周一
  • 批量操作:所有新增列通过pd.date_range批量生成,合并操作使用pd.concat完成,全程无循环,保证处理大数据集时的效率
  • 避免重复:新增日期范围的结束日期设为原首日期的前一天,确保不会和原数据的列索引重复

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 07:09:52