首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据另一栏熊猫的日期递增的快速实现

根据另一栏熊猫的日期递增的快速实现
EN

Stack Overflow用户
提问于 2019-01-09 13:43:57
回答 1查看 48关注 0票数 0

我有以下熊猫DF:

代码语言:javascript
复制
print(df.to_dict())
{'Date_Installed': {11885: Timestamp('2018-11-15 00:00:00'), 111885: Timestamp('2018-11-15 00:00:00')}, 'days_from_instalation': {11885: 2, 111885: 3}}

我想要创建一个新列,它将'Date_Installed'列从'days_from_instalation'列的天数递增

我知道使用apply()方法是可能的,如下所示:

代码语言:javascript
复制
from datetime import timedelta
df['desired_date']=df.apply(lambda row:row['Date_Installed']+timedelta(row['days_from_instalation']), axis=1)

它产生了我想要的输出:

代码语言:javascript
复制
print(df.to_dict())

{'Date_Installed': {11885: Timestamp('2018-11-15 00:00:00'), 111885: Timestamp('2018-11-15 00:00:00')}, 'days_from_instalation': {11885: 2, 111885: 3}, 'desired_date': {11885: Timestamp('2018-11-17 00:00:00'), 111885: Timestamp('2018-11-18 00:00:00')}}

然而,这个方法非常慢,不太现实地适用于我的全部DF。

我不想问几个关于增加熊猫日期的问题,像这样:

熊猫-增量-日期时间

但它们似乎都在处理不断增长的问题,而没有任何矢量化的方法来这样做。

这种类型的增量有矢量化版本吗?

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-09 13:48:38

添加由to_timedelta创建的时间差

代码语言:javascript
复制
df['desired_date'] = df['Date_Installed'] +
                        pd.to_timedelta(df['days_from_instalation'], unit='d')

print (df)
       Date_Installed  days_from_instalation desired_date
11885      2018-11-15                      2   2018-11-17
111885     2018-11-15                      3   2018-11-18

另一个numpy解决方案更快,但丢失了时区(如果指定的话):

代码语言:javascript
复制
a = pd.to_timedelta(df['days_from_instalation'], unit='d').values.astype(np.int64)
df['desired_date1'] = pd.to_datetime(df['Date_Installed'].values.astype(np.int64)+a, unit='ns')

性能

代码语言:javascript
复制
#20krows
df = pd.concat([df] * 10000, ignore_index=True)

In [217]: %timeit df['desired_date1'] = pd.to_datetime(df['Date_Installed'].values.astype(np.int64) + pd.to_timedelta(df['days_from_instalation'], unit='d').values.astype(np.int64), unit='ns')
886 µs ± 9.92 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

In [218]: %timeit df['desired_date'] = df['Date_Installed'] + pd.to_timedelta(df['days_from_instalation'], unit='d')
1.53 ms ± 82.1 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54111553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档