Pandas 熊猫:将timedelta列添加到datetime列(矢量化)

Pandas 熊猫:将timedelta列添加到datetime列(矢量化),pandas,vectorization,timedelta,Pandas,Vectorization,Timedelta,我有一个包含两列的pandas数据框架,一个是date列,一个是int列,我只想将int列(以天为单位)添加到date列。我使用df.apply()找到了一个解决方案,但在我的完整数据集上速度太慢了。我看不到大量关于以矢量化方式执行此操作的文档(我能找到的最接近的是),因此我想确保找到的解决方案是前进的最佳方式 我的原始数据只是一列字符串作为一列整数(天) 我的第一个想法(有效)是使用。应用如下: def f(x): return x['ship_date'] + timedel

我有一个包含两列的pandas数据框架,一个是date列,一个是int列,我只想将int列(以天为单位)添加到date列。我使用df.apply()找到了一个解决方案,但在我的完整数据集上速度太慢了。我看不到大量关于以矢量化方式执行此操作的文档(我能找到的最接近的是),因此我想确保找到的解决方案是前进的最佳方式

我的原始数据只是一列字符串作为一列整数(天)

我的第一个想法(有效)是使用。应用如下:

def f(x):    
    return x['ship_date'] + timedelta(days=x['days_supply'] )

df['ship_date'] = pd.to_datetime(df['ship_string'])

df['supply_ended'] = df.apply(f,axis = 1)
这是可行的,但速度非常缓慢。我已经在下面发布了我的备选解决方案,作为对这个问题的回答,但我想确认这是“最佳实践”。我在pandas中找不到很多关于向日期添加timedelta列的好线程(特别是以矢量化的方式),所以我想我应该添加一个用户友好一点的线程,希望它能帮助下一个尝试这样做的可怜人。

完整代码解决方案:

import pandas as pd
from datetime import timedelta

df = pd.DataFrame([['2016-01-10',28],['2016-05-11',28],['2016-02-23',15],['2015-12-08',30]], 
                      columns = ['ship_string','days_supply'])

df['ship_date'] = pd.to_datetime(df['ship_string'])

df['time_added'] = pd.to_timedelta(df['days_supply'],'d')
df['supply_ended'] = df['ship_date'] + df['time_added']

print df

  ship_string  days_supply  ship_date  time_added supply_ended
0  2016-01-10           28 2016-01-10     28 days   2016-02-07
1  2016-05-11           28 2016-05-11     28 days   2016-06-08
2  2016-02-23           15 2016-02-23     15 days   2016-03-09
3  2015-12-08           30 2015-12-08     30 days   2016-01-07

如果这不是一个好的矢量化解决方案,请在下面的评论中告诉我,我将进行编辑

这是一个很好的解决方案,如果不需要创建新列,可能一行更好
df['supply\u ended']=pd.to\u datetime(df['ship\u string'])+pd.to\u timedelta(df['days\u supply'],'d')
,我找不到函数
pd.to\u timedelta
,因为
DateOffset
无法与Series一起工作,所以感谢您发布该解决方案<代码>,'d'这个小家伙。。。最有价值球员
import pandas as pd
from datetime import timedelta

df = pd.DataFrame([['2016-01-10',28],['2016-05-11',28],['2016-02-23',15],['2015-12-08',30]], 
                      columns = ['ship_string','days_supply'])

df['ship_date'] = pd.to_datetime(df['ship_string'])

df['time_added'] = pd.to_timedelta(df['days_supply'],'d')
df['supply_ended'] = df['ship_date'] + df['time_added']

print df

  ship_string  days_supply  ship_date  time_added supply_ended
0  2016-01-10           28 2016-01-10     28 days   2016-02-07
1  2016-05-11           28 2016-05-11     28 days   2016-06-08
2  2016-02-23           15 2016-02-23     15 days   2016-03-09
3  2015-12-08           30 2015-12-08     30 days   2016-01-07