在 Pandas 中加快日期计算之间的时间?
Speeding up time between date calculation in Pandas?
我的 pandas 数据框中有两个日期时间列,df
:
d = pd.DatetimeIndex(start='1700-01-01', end='2017-01-01', freq='1D')
df = pd.DataFrame({'date1':d})
df['date2'] = df['date1'].sample(frac=1).values
我使用以下方法计算这些日期之间的周数:
df['weeks'] = (df['date1'].subtract(df['date2'])).dt.days/7
在具有 1100 万行的数据帧上,这比我预期的要长 - 大约 10 分钟。
有更快的方法吗?
使用 numpy
- 将两列都转换为 array
s,减去并最后转换为天数:
df['weeks'] = (df['date1'].values- df['date2'].values) / np.timedelta64(1, 'D') / 7
样本:
d = pd.DatetimeIndex(start='1700-01-01', end='2017-01-01', freq='1D')
df = pd.DataFrame({'date1':d})
df['date2'] = df['date1'].sample(frac=1).values
#print (df)
In [292]: %timeit df['weeks'] = (df['date1'].subtract(df['date2'])).dt.days / 7
1 loop, best of 3: 942 ms per loop
In [293]: %timeit df['weeks'] = (df['date1'].values- df['date2'].values) / np.timedelta64(1, 'D') / 7
1000 loops, best of 3: 1.89 ms per loop
我的 pandas 数据框中有两个日期时间列,df
:
d = pd.DatetimeIndex(start='1700-01-01', end='2017-01-01', freq='1D')
df = pd.DataFrame({'date1':d})
df['date2'] = df['date1'].sample(frac=1).values
我使用以下方法计算这些日期之间的周数:
df['weeks'] = (df['date1'].subtract(df['date2'])).dt.days/7
在具有 1100 万行的数据帧上,这比我预期的要长 - 大约 10 分钟。
有更快的方法吗?
使用 numpy
- 将两列都转换为 array
s,减去并最后转换为天数:
df['weeks'] = (df['date1'].values- df['date2'].values) / np.timedelta64(1, 'D') / 7
样本:
d = pd.DatetimeIndex(start='1700-01-01', end='2017-01-01', freq='1D')
df = pd.DataFrame({'date1':d})
df['date2'] = df['date1'].sample(frac=1).values
#print (df)
In [292]: %timeit df['weeks'] = (df['date1'].subtract(df['date2'])).dt.days / 7
1 loop, best of 3: 942 ms per loop
In [293]: %timeit df['weeks'] = (df['date1'].values- df['date2'].values) / np.timedelta64(1, 'D') / 7
1000 loops, best of 3: 1.89 ms per loop