为仅含月日数据的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
思路说明
- 临时日期转换:先将月日字符串转为以2020年为基准的datetime对象,方便后续日期先后比较。
- 跨年判断:通过对比当前行与前一行的临时日期,若当前日期更小(比如1月出现在12月之后),则判定为跨年,累加偏移次数。
- 补全年份:给临时日期加上偏移的年份数,再转换为目标字符串格式,得到最终完整日期。
内容的提问来源于stack exchange,提问作者Joost Lenten
相关产品推荐
相关产品推荐

