2017-08-10 41 views
0

我有一個數據幀,其中我想創建一個新的列將總結兩列:總和日期整數在Python 3.x的

index Date   num 
0  0 2004-03-09  1 
1  1 2004-03-09  2 
2  2 2004-03-09 -300 
3  3 2004-03-09  -5 
4  4 2004-03-09  3 

日期是日期格式,num是整數。輸出應該是這樣的:

index Date   num Date_2 
0  0 2004-03-09  1 2004-03-10 
1  1 2004-03-09  2 2004-03-11 
2  2 2004-03-09 -300 2003-05-14 
3  3 2004-12-09  -5 2003-12-04 
4  4 2004-02-09  3 2004-02-12 
5  5 2004-05-09  3 2004-05-12 

這是非常簡單的R中的事,但因爲我剛開始使用Python,我不能弄明白。 (當然,當我試圖總結我得到一個錯誤,他們是不兼容的操作列)我想在天轉換「NUM」列

[In]: df['Date_2'] = df['Date'] + df['num'] 

[Out]: incompatible type for a datetime/timedelta operation [__add__] 

,但我沒有成功。

+0

顯示您的代碼,請 – eyllanesc

+0

df ['Date_2'] = df ['Date'] + df ['num'] - >當然,我得到不兼容的錯誤 – Katerina

+0

[編輯您的問題](https: //stackoverflow.com/posts/45602469/edit)並添加它。 – eyllanesc

回答

1

incompatible type ... [__add__]意味着你正在嘗試添加不執行__add__魔術方法以這樣一種方式,他們處理每個人的兩個對象對象類型。

您需要,可以從整數創建從你的整數列,它是在你的數據幀的日期兼容的tim​​edelta相關的對象。

假設你使用的是熊貓dataframes,大熊貓有可以從int像這樣營造Timedelta標量類型:Timedelta(df['num'], unit='d')

+0

它的工作!非常感謝! – Katerina

0

您可以使用datetime.timedelta(天= num)。 象下面這樣:

df['Date_2'] = df['Date'] + datetime.timedelta(days=df['num']) 
2
In [277]: df['Date2'] = df.apply(lambda x: x.Date + np.timedelta64(x.num, 'D'), 
    ...: axis=1) 

In [278]: df 
Out[278]: 
    index  Date num  Date2 
0  0 2004-03-09 1 2004-03-10 
1  1 2004-03-09 2 2004-03-11 
2  2 2004-03-09 -300 2003-05-14 
3  3 2004-03-09 -5 2004-03-04 
4  4 2004-03-09 3 2004-03-12 
+1

應該是+,不 - – JoshuaRLi

+0

謝謝,不知道爲什麼我這樣做。 –

+0

謝謝,這也適用。雖然接受的解決方案在大型數據集中要快得多。 – Katerina

0

使用pd.to_datetimepd.to_timedelta簡單的方法。五月

df['date2']=pd.to_datetime(df['date'])+pd.to_timedelta(df['num'].astype(np.int),'D')

這一個幫助你。