Reputation: 4317
I have a data frame of dates and weeks that looks like this:
weeks = ["2016 W08","2016 W09","2016 W10","2016 W11"]
date = ["2-22-16", "2-29-16", "3-7-16", "3-14-16"]
df = pd.DataFrame(
{'week': weeks,
'date': date,
})
df
date week
0 2016-02-22 2016 W08
1 2016-02-29 2016 W09
2 2016-03-07 2016 W10
3 2016-03-14 2016 W11
And I'm trying to very simply create a new column end
that is 7 days later than the value of date
.
I totally suck at for loops, and am missing how to loop through each index.
import datetime
for row in df['date']:
start_date = df[row]
df['end_date'] = start_date + datetime.timedelta(days = 7)
I know I'm close to the answer but missing it!
Upvotes: 0
Views: 1435
Reputation: 323226
from datetime import timedelta
df.date=pd.to_datetime(df.date)
df.date+timedelta(days=7)
Out[691]:
0 2016-02-29
1 2016-03-07
2 2016-03-14
3 2016-03-21
Name: date, dtype: datetime64[ns]
If you need for loop:
import datetime
for i,row in df.iterrows():
df.loc[i,'new']= row['date'] + datetime.timedelta(days = 7)
df
Out[698]:
date week new
0 2016-02-22 2016 W08 2016-02-29
1 2016-02-29 2016 W09 2016-03-07
2 2016-03-07 2016 W10 2016-03-14
3 2016-03-14 2016 W11 2016-03-21
EDIT : Why your loop does not work
for row in df['date']:
start_date = row
print(start_date + datetime.timedelta(days=7))
row
in here return the value of date, you can not call df
values by its own values.
Upvotes: 1
Reputation: 6556
Try with pd.DateOffset:
import pandas as pd
weeks = ["2016 W08","2016 W09","2016 W10","2016 W11"]
date = ["2-22-16", "2-29-16", "3-7-16", "3-14-16"]
df = pd.DataFrame(
{'week': weeks,
'date': date,
})
df['date'] = pd.to_datetime(df['date']) #convert date column to datetime format
df['end_date'] = pd.DatetimeIndex(df['date']) + pd.DateOffset(7) #create new column end_date which is 7 days later
df
df will be:
date week end_date
0 2016-02-22 2016 W08 2016-02-29
1 2016-02-29 2016 W09 2016-03-07
2 2016-03-07 2016 W10 2016-03-14
3 2016-03-14 2016 W11 2016-03-21
Upvotes: 1