我有一个带有日期列的数据框。持续时间为365天,从2017年11月11日开始,至2018年11月11日结束。
Date
02/11/2017
03/11/2017
05/11/2017
.
.
01/11/2018
我要添加一个名为Day_Of_Year的相邻列,如下所示:
Date Day_Of_Year
02/11/2017 1
03/11/2017 2
05/11/2017 4
.
.
01/11/2018 365
很抱歉,这是一个非常基本的问题,但不幸的是,我还没有开始。
我可以使用datetime(),但这将返回值,例如1表示1月1日,2表示1月2日,依此类推。等等。因此,这对我不起作用。
答案 0 :(得分:4)
首先转换列to_datetime
,然后减去datetime
,转换为days
,然后添加1
:
df['Date'] = pd.to_datetime(df['Date'], format='%d/%m/%Y')
df['Day_Of_Year'] = df['Date'].sub(pd.Timestamp('2017-11-02')).dt.days + 1
print (df)
Date Day_Of_Year
0 02/11/2017 1
1 03/11/2017 2
2 05/11/2017 4
3 01/11/2018 365
或减去列的第一个值:
df['Date'] = pd.to_datetime(df['Date'], format='%d/%m/%Y')
df['Day_Of_Year'] = df['Date'].sub(df['Date'].iat[0]).dt.days + 1
print (df)
Date Day_Of_Year
0 2017-11-02 1
1 2017-11-03 2
2 2017-11-05 4
3 2018-11-01 365
答案 1 :(得分:2)
将strftime
与'%j'
一起使用
s=pd.to_datetime(df.Date,dayfirst=True).dt.strftime('%j').astype(int)
s-s.iloc[0]
Out[750]:
0 0
1 1
2 3
Name: Date, dtype: int32
#df['new']=s-s.iloc[0]
答案 2 :(得分:2)
Python有dayofyear
。因此,使用pd.to_datetime
将列设置为正确的格式,然后应用Series.dt.dayofyear
。最后,使用一些模运算来查找原始日期中的所有内容
df['Date'] = pd.to_datetime(df['Date'], format='%d/%m/%Y')
df['day of year'] = df['Date'].dt.dayofyear - df['Date'].dt.dayofyear[0] + 1
df['day of year'] = df['day of year'] + 365*((365 - df['day of year']) // 365)
输出
Date day of year
0 2017-11-02 1
1 2017-11-03 2
2 2017-11-05 4
3 2018-11-01 365
但是我在更多行代码中的行为与Jezrael基本上相同,所以我投给她/他