Python 将datetime timedelta与数组中的序列一起使用

Python 将datetime timedelta与数组中的序列一起使用,python,datetime,pandas,Python,Datetime,Pandas,我有一个熊猫模拟图,看起来像这样: 现在,我想添加另一列,“date”,它是对应于“Now”加上“cum_days”(增量时间)的日期 但deltatime似乎不使用级数,而是使用固定的标量 TypeError: unsupported type for timedelta days component: Series 有没有一种方法可以在矢量化操作中解决这个问题,而不必迭代每一行sim_df?这个方法怎么样 start = dt.datetime.now() sim_df['date']

我有一个熊猫模拟图,看起来像这样:

现在,我想添加另一列,“date”,它是对应于“Now”加上“cum_days”(增量时间)的日期

但deltatime似乎不使用级数,而是使用固定的标量

TypeError: unsupported type for timedelta days component: Series
有没有一种方法可以在矢量化操作中解决这个问题,而不必迭代每一行sim_df?

这个方法怎么样

start = dt.datetime.now()
sim_df['date'] = start + sim_df['cum_days'].map(dt.timedelta)

这将
dt.timedelta
分别应用于
cum_days
列的每个元素。

使用列表将timedelta添加到现在

sim_df = pd.DataFrame({'delta_time_days': [1.02, .09, 1.08, 1.7, 4.1, 0.3, .13, .01, .3, .7], 
                       'cum_days': [1.1, 1.1, 2.2, 3.9, 8.0, 8.3, 8.4, 8.4, 8.8, 9.5]})

sim_df['date'] = [dt.datetime.now() + dt.timedelta(days=d) for d in sim_df.cum_days]

>>> sim_df
   cum_days  delta_time_days                       date
0       1.1             1.02 2016-02-11 17:36:11.320271
1       1.1             0.09 2016-02-11 17:36:11.320286
2       2.2             1.08 2016-02-12 20:00:11.320289
3       3.9             1.70 2016-02-14 12:48:11.320292
4       8.0             4.10 2016-02-18 15:12:11.320296
5       8.3             0.30 2016-02-18 22:24:11.320299
6       8.4             0.13 2016-02-19 00:48:11.320301
7       8.4             0.01 2016-02-19 00:48:11.320304
8       8.8             0.30 2016-02-19 10:24:11.320306
9       9.5             0.70 2016-02-20 03:12:11.320309

从列中构造一个
TimedeltaIndex
,并将其添加到标量值中:

In [26]:
sim_df = pd.DataFrame({'delta_time_days': [1.02, .09, 1.08, 1.7, 4.1, 0.3, .13, .01, .3, .7], 
                       'cum_days': [1.1, 1.1, 2.2, 3.9, 8.0, 8.3, 8.4, 8.4, 8.8, 9.5]})
start = dt.datetime.now()
sim_df['date'] = start + pd.TimedeltaIndex(sim_df['cum_days'], unit='D')
sim_df

Out[26]:
   cum_days  delta_time_days                       date
0       1.1             1.02 2016-02-12 01:40:32.413413
1       1.1             0.09 2016-02-12 01:40:32.413413
2       2.2             1.08 2016-02-13 04:04:32.413413
3       3.9             1.70 2016-02-14 20:52:32.413413
4       8.0             4.10 2016-02-18 23:16:32.413413
5       8.3             0.30 2016-02-19 06:28:32.413413
6       8.4             0.13 2016-02-19 08:52:32.413413
7       8.4             0.01 2016-02-19 08:52:32.413413
8       8.8             0.30 2016-02-19 18:28:32.413413
9       9.5             0.70 2016-02-20 11:16:32.413413

什么类型的cum_天?浮球?这是最快的方法,伟大的蟒蛇式答案。谢谢,有没有办法将时间增量指定为月而不是天@Kris@WesleyKitlasten不明白为什么不行,你试过了吗?@Kris,我试过很多东西。我终于做到了:df['date']=pd.to_datetime(simstart)+pd.TimedeltaIndex(df['day'],unit='D'),其中simstart=datetime.date(1979,7,2),df['day']是天数。后跟df.set_index('date',inplace=True)df.drop(['day'],inplace=True,axis=1)
In [26]:
sim_df = pd.DataFrame({'delta_time_days': [1.02, .09, 1.08, 1.7, 4.1, 0.3, .13, .01, .3, .7], 
                       'cum_days': [1.1, 1.1, 2.2, 3.9, 8.0, 8.3, 8.4, 8.4, 8.8, 9.5]})
start = dt.datetime.now()
sim_df['date'] = start + pd.TimedeltaIndex(sim_df['cum_days'], unit='D')
sim_df

Out[26]:
   cum_days  delta_time_days                       date
0       1.1             1.02 2016-02-12 01:40:32.413413
1       1.1             0.09 2016-02-12 01:40:32.413413
2       2.2             1.08 2016-02-13 04:04:32.413413
3       3.9             1.70 2016-02-14 20:52:32.413413
4       8.0             4.10 2016-02-18 23:16:32.413413
5       8.3             0.30 2016-02-19 06:28:32.413413
6       8.4             0.13 2016-02-19 08:52:32.413413
7       8.4             0.01 2016-02-19 08:52:32.413413
8       8.8             0.30 2016-02-19 18:28:32.413413
9       9.5             0.70 2016-02-20 11:16:32.413413