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

如何在DataFrame中生成跨年不重置的连续日期序号dayNo?

实现连续递增的dayNo列

这里有两种简洁的实现方式,根据你的场景选择:

方法一:基于年份偏移量(通用,支持多年份)

如果你的数据可能扩展到更多年份,或者年份不连续,可以通过计算每个年份的累计前序年份总天数来生成连续的dayNo:

# 确保TradeDate是datetime类型
df['TradeDate'] = pd.to_datetime(df['TradeDate'], dayfirst=True)

# 提取年份和当年天数
df['year'] = df['TradeDate'].dt.year
df['day_of_year'] = df['TradeDate'].dt.day_of_year

# 计算各年份的累计偏移量:前序所有年份的总天数之和
sorted_years = sorted(df['year'].unique())
year_offset = {}
total_days = 0
for year in sorted_years:
    year_offset[year] = total_days
    # 自动获取当年总天数,处理闰年
    total_days += pd.Period(year).days_in_year

# 生成连续的dayNo
df['dayNo'] = df.apply(lambda row: row['day_of_year'] + year_offset[row['year']], axis=1)

# 可选:删除中间辅助列
df.drop(['year', 'day_of_year'], axis=1, inplace=True)

方法二:基于基准日期的天数差(简洁,适合连续两年)

如果你的数据只有2022和2023连续两年,直接计算每个日期与2022年1月1日的天数差,再加1即可:

# 转换日期列
df['TradeDate'] = pd.to_datetime(df['TradeDate'], dayfirst=True)

# 设定基准日期为2022年1月1日
base_date = pd.to_datetime('2022-01-01')

# 计算连续dayNo:基准日为第1天,2023年1月1日自动为366
df['dayNo'] = (df['TradeDate'] - base_date).dt.days + 1

说明

  • 方法二无需手动处理闰年,pandas会自动计算日期差,代码更简洁高效。
  • 方法一适合数据包含非连续年份或未来扩展更多年份的场景,灵活性更强。

内容的提问来源于stack exchange,提问作者K.Best

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 16:31:02