【问题标题】:Speeding up time between date calculation in Pandas?在 Pandas 中加快日期计算之间的时间?
【发布时间】:2018-04-23 17:32:27
【问题描述】:

我的 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 分钟。

有没有更快的方法来做到这一点?

【问题讨论】:

  • 您可以考虑使用numba...您可以在问题正文中提供几行数据吗?
  • @COLDSPEED 添加示例

标签: python performance pandas memory-efficient


【解决方案1】:

使用numpy - 将两列都转换为arrays,减去最后转换为天数:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-24
    • 2020-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-31
    相关资源
    最近更新 更多