我有一个大数据集,我需要对操作进行日期处理,由于花费的时间太长,我想知道是否有其他方法可以提高速度。数据框如下所示:
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
我目前的方法使用应用函数和相对增量方法,例如:
def newDateCalc(self, row):
return row[0] + relativedelta(months = row[1])
df['newDate'] = df[['Date', 'Month']].apply(lambda row: newDateCalc(row), axis = 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
您可以将df.transform
与relativedelta
一起使用:
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]