如何在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
相关产品推荐
相关产品推荐

