![](/img/trans.png)
[英]Add data to a new column in pandas.DataFrame from existing columns using for-loop
[英]add column of new dates from existing columns using pandas
我有一個日期和星期的數據框,如下所示:
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
我試圖非常簡單地創建一個比date
值晚7天的新列end
。
我完全不喜歡for循環,卻錯過了如何循環遍歷每個索引。
import datetime
for row in df['date']:
start_date = df[row]
df['end_date'] = start_date + datetime.timedelta(days = 7)
我知道我已經接近答案了,但是錯過了!
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]
如果需要循環:
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
編輯:為什么您的循環不起作用
for row in df['date']:
start_date = row
print(start_date + datetime.timedelta(days=7))
此處的row
返回date的值,不能通過其自身的值調用df
值。
嘗試使用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將是:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.