从特定日期开始的年份中的天数值

时间:2018-12-03 14:38:52

标签: python-3.x pandas datetime dataframe

我有一个带有日期列的数据框。持续时间为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日,依此类推。等等。因此,这对我不起作用。

3 个答案:

答案 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基本上相同,所以我投给她/他

相关问题