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

如何在Pandas DataFrame中按规则将日期转换为对应周一

Pandas DataFrame日期列头按自定义规则转换为对应周一日期

需求说明

需要将Pandas DataFrame的日期列头按照以下规则转换:

  • 若日期为周一:保持原日期不变
  • 若日期为周二、周三、周四:转换为当周周一
  • 若日期为周五、周六、周日:转换为下周周一
    转换后DataFrame的数据内容保持不变。

解决方案

我们可以通过将列头转换为datetime类型,利用星期几属性实现条件判断,最后将调整后的日期转回原格式字符串替换列头。

代码实现

首先导入依赖库:

import pandas as pd
import numpy as np

创建示例DataFrame(匹配需求中的输入示例):

# 示例DataFrame,列头包含2022/4/18(周一)、2022/5/10(周二)
df = pd.DataFrame(
    data=[[10, 20], [30, 40]],
    columns=['2022/4/18', '2022/5/10']
)

方法一:使用numpy.where实现向量式条件判断

# 将列名转换为datetime对象
cols = pd.to_datetime(df.columns)

# 根据星期几计算需要调整的天数
adjustments = np.where(
    cols.weekday == 0,  # 周一(weekday=0)
    pd.Timedelta(days=0),
    np.where(
        cols.weekday.isin([1, 2, 3]),  # 周二到周四(weekday=1-3)
        -cols.weekday.apply(lambda x: pd.Timedelta(days=x)),
        pd.Timedelta(days=7) - cols.weekday.apply(lambda x: pd.Timedelta(days=x))  # 周五到周日(weekday=4-6)
    )
)

# 生成调整后的日期并转为原格式字符串
new_columns = cols + adjustments
df.columns = new_columns.strftime('%Y/%m/%d')

方法二:使用自定义函数+map处理(更直观)

cols = pd.to_datetime(df.columns)

def adjust_date_to_monday(date):
    weekday = date.weekday()
    if weekday == 0:
        return date
    elif 1 <= weekday <= 3:
        return date - pd.Timedelta(days=weekday)
    else:
        return date + pd.Timedelta(days=7 - weekday)

new_columns = cols.map(adjust_date_to_monday)
df.columns = new_columns.strftime('%Y/%m/%d')

验证结果

执行上述代码后,打印列头:

print(df.columns)

输出结果:

Index(['2022/4/18', '2022/5/09'], dtype='object')

符合需求:2022/5/10(周二)被转换为当周周一2022/5/09,2022/4/18(周一)保持不变,DataFrame的数据内容未改变。

关键逻辑说明

  • pd.to_datetime():将列头的日期字符串转换为datetime对象,便于获取星期几(weekday属性,周一为0,周日为6)
  • 调整规则:
    • 周一:无需调整,直接返回原日期
    • 周二-周四:减去当前星期几对应的天数(如周二减1天,周三减2天),回到当周周一
    • 周五-周日:加上7-当前星期几的天数(如周五加3天,周日加1天),跳转到下周周一
  • strftime('%Y/%m/%d'):将调整后的datetime对象转回与原格式一致的字符串,保证列头格式统一

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 06:15:01