2017-04-04 28 views
2

假設我有一個數據幀:Applymap界面操作幾個(二)列

df = pd.DataFrame({'DATE_1':['2010-11-06', '2010-10-07', '2010-09-07', '2010-05-07'], 
         'DATE_2':['2010-12-07', '2010-11-06', '2010-10-07', '2010-08-06']}) 
df['DATE_1'] = pd.to_datetime(df['DATE_1']) 
df['DATE_2'] = pd.to_datetime(df['DATE_2']) 

所以它看起來像:

 DATE_1  DATE_2 
0 2010-11-06 2010-12-07 
1 2010-10-07 2010-11-06 
2 2010-09-07 2010-10-07 
3 2010-05-07 2010-08-06 

我想創造另一列DIFF這是DATE_2 diffrence和DATE_1在幾天或幾個月或幾年。
我想有像一個,這是根據這句話,因爲將不得不從創建很多列,類似於DIFF很多DATE_X列的接口:

def date_diffrence(x, y, parameter): 
    if !np.isnan(x): 
     return (x-y) 
df['DIFF'] = df.apply(date_diffrence(df['DATE_2'], df['DATE_1'])) 

根據這篇文章:Difference between map, applymap and apply methods in Pandas,在我看來,我無法創建這樣一個通用接口。我對嗎?

+0

在這裏檢查http://stackoverflow.com/questions/221325 25 /添加列與數天數之間的數據框熊貓 – manvi77

回答

1

看來你需要的功能,無需applySeries(的df列)作爲參數與dt.days

def date_diffrence_days(x, y): 
    return (x-y).dt.days 

df['DIFF'] = date_diffrence_days(df['DATE_2'], df['DATE_1']) 
print (df) 
     DATE_1  DATE_2 DIFF 
0 2010-11-06 2010-12-07 31 
1 2010-10-07 2010-11-06 30 
2 2010-09-07 2010-10-07 30 
3 2010-05-07 2010-08-06 91 

什麼是一樣的:

df['DIFF'] = (df['DATE_2'] - df['DATE_1']).dt.days 
print (df) 
     DATE_1  DATE_2 DIFF 
0 2010-11-06 2010-12-07 31 
1 2010-10-07 2010-11-06 30 
2 2010-09-07 2010-10-07 30 
3 2010-05-07 2010-08-06 91 

編輯:

def date_diffrence_days(x, y, parameter): 
    if parameter == 'm': 
     return (x-y).dt.days 
    elif parameter == 's': 
     return (x-y).dt.total_seconds() 

df['DIFF'] = date_diffrence_days(df['DATE_2'], df['DATE_1'], 's') 
print (df) 
     DATE_1  DATE_2  DIFF 
0 2010-11-06 2010-12-07 2678400.0 
1 2010-10-07 2010-11-06 2592000.0 
2 2010-09-07 2010-10-07 2592000.0 
3 2010-05-07 2010-08-06 7862400.0 
+0

嗯,這是真的。我的錯 - 對DataFrames不是很熟悉 –

+0

如果我用附加選項更新我的問題,您能否更新您的答案? –

+0

你覺得'!np.isnan(x):'? – jezrael