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

如何在Pandas中基于日期列添加年日、半年日等衍生列

在Pandas中基于日期列添加各类日序列

首先确保你的date列是datetime类型,如果不是先转换:

import pandas as pd

# 转换为datetime类型(如果还不是的话)
df['date'] = pd.to_datetime(df['date'])

接下来逐个实现你需要的列:

1. Day of Year (1-365/366)

Pandas内置了直接获取年内日序的方法,默认会区分闰年(返回1-366):

df['day_of_year'] = df['date'].dt.dayofyear

如果需要强制将闰年的366天转为365(即把2月29日算作365),可以这样处理:

df['day_of_year'] = df['date'].dt.dayofyear
# 处理闰年的2月29日
df.loc[df['date'].dt.is_leap_year & (df['day_of_year'] == 366), 'day_of_year'] = 365

2. Day of Half Year (1-182)

参考你R语言的思路,用模运算实现,但调整避免出现0值(R中yearday %%182会返回0-181,我们要转为1-182):

df['day_of_half_year'] = (df['day_of_year'] - 1) % 182 + 1

这样上半年的最后一天(非闰年第182天)会返回182,下半年第一天(第183天)返回1,完美匹配1-182的范围。

3. Day of Quarter (1-92)

Pandas有内置的季度日序方法,直接返回每个季度的第几天(范围1-92,自动适配不同季度的天数):

df['day_of_quarter'] = df['date'].dt.dayofquarter

4. Day of Half Quarter (1-46)

基于季度日序,用模运算拆分每个季度为两个半段,确保返回1-46的范围:

df['day_of_half_quarter'] = (df['day_of_quarter'] - 1) % 46 + 1

比如季度第47天会转为1,第92天转为46,刚好对应每个半季度的日序。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 23:01:07