2017-07-25 28 views
1

我有一個需要日期操作的大數據集,而且它耗時太長,我想知道是否有其他方法可以提高速度。數據幀看起來像以下:提高熊貓日期時間操作的性能

Date, Month 
2017-01-01, 0 
2017-01-01, 1 
2017-01-01, 2 

我需要創建另一列,增加了一個月列日期列,所以它看起來像以下:

Date, Month, newDate 
2017-01-01, 0, 2017-01-01 
2017-01-01, 1, 2017-02-01 
2017-01-01, 2, 2017-03-01 

我現在的方法是使用應用功能和relativedelta方法等:

def newDateCalc(self, row): 
return row[0] + relativedelta(months = row[1]) 

df['newDate'] = df[['Date', 'Month']].apply(lambda row: newDateCalc(row), axis = 1)

感謝您對您的幫助提前,

回答

1

這裏是我的矢量化的嘗試:

df['newDate'] = (df.Date.values.astype('M8[M]') + 
       df.Month.values * np.timedelta64(1, 'M')).astype('M8[D]') 

結果:

In [106]: df 
Out[106]: 
     Date Month newDate 
0 2017-01-01  0 2017-01-01 
1 2017-01-01  1 2017-02-01 
2 2017-01-01  2 2017-03-01 
+0

哦,不錯的一個... –

+0

@cᴏʟᴅsᴘᴇᴇᴅ,謝謝! :) – MaxU

+0

這工作非常好!非常感謝 – Hojin

1

您可以使用df.transformrelativedelta

In [960]: df.transform(lambda x: x['Date'] + relativedelta(months=x['Month']), axis=1) 
Out[960]: 
0 2017-01-01 
1 2017-02-01 
2 2017-03-01 
dtype: datetime64[ns]