更快的是使用本机函数,这是矢量化的,而不是
apply
.dt
for应用函数for
Series/ column
:
df['YEAR'] = df.DATE.dt.year
df['MONTH'] = df.DATE.dt.month
df[['A', 'B']] = df.DATE.apply(lambda x: (x.year, x.month)).tolist()
# That is the initial DataFrame with 10k rows
df = pd.DataFrame(data = {'DATE': [pd.Timestamp.now()] * 10000})
In [168]: %%timeit
...: df['YEAR'] = df.DATE.apply(lambda x: x.year)
...: df['MONTH'] = df.DATE.apply(lambda x: x.month)
...:
...:
70.4 ms ± 265 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
In [169]: %%timeit
...: df[['A', 'B']] = df.DATE.apply(lambda x: (x.year, x.month)).tolist()
...:
...:
64.5 ms ± 7.28 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
In [170]: %%timeit
...: df['C'] = df.DATE.dt.year
...: df['D'] = df.DATE.dt.month
...:
...:
2.34 ms ± 17.6 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)