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

为仅含月日数据的DataFrame添加年份,自动处理跨年情况

为月日格式日期自动补全年份(识别跨年)

给定仅包含月日的DataFrame,起始年份为2020,需要自动识别跨年情况并补全对应年份,最终生成包含完整日期的DataFrame。

解决方案代码

import pandas as pd

# 原始数据
df = pd.DataFrame({'Date': ['01-01', '02-15', '12-31', '01-10', '02-07', '08-20', '12-30', '01-05', '09-07']})

# 1. 将月日字符串转为临时datetime对象(临时用2020年)
df['temp_date'] = pd.to_datetime(df['Date'], format='%m-%d', year=2020)

# 2. 计算跨年偏移量:当前日期小于前一行时标记为跨年,累加得到偏移次数
df['year_offset'] = (df['temp_date'] < df['temp_date'].shift()).cumsum()

# 3. 计算实际年份并生成完整日期
start_year = 2020
df['Date'] = df['temp_date'] + pd.DateOffset(years=df['year_offset'])
# 转为指定字符串格式(mm-dd-yyyy)
df['Date'] = df['Date'].dt.strftime('%m-%d-%Y')

# 清理临时列
df = df.drop(['temp_date', 'year_offset'], axis=1)

print(df)

输出结果

Date
0  01-01-2020
1  02-15-2020
2  12-31-2020
3  01-10-2021
4  02-07-2021
5  08-20-2021
6  12-30-2021
7  01-05-2022
8  09-07-2022

思路说明

  1. 临时日期转换:先将月日字符串转为以2020年为基准的datetime对象,方便后续日期先后比较。
  2. 跨年判断:通过对比当前行与前一行的临时日期,若当前日期更小(比如1月出现在12月之后),则判定为跨年,累加偏移次数。
  3. 补全年份:给临时日期加上偏移的年份数,再转换为目标字符串格式,得到最终完整日期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 19:52:20