我觉得这应该很容易完成,但我无法弄清楚如何.我有一个pandas
DataFrame
列日期:
0 2012-08-21 1 2013-02-17 2 2013-02-18 3 2013-03-03 4 2013-03-04 Name: date, dtype: datetime64[ns]
我希望有一列持续时间,例如:
0 0 1 80 days 2 1 day 3 15 days 4 1 day Name: date, dtype: datetime64[ns]
我的尝试产生了大量的0天NaT
而是:
>>> df.date[1:] - df.date[:-1] 0 NaT 1 0 days 2 0 days ...
有任何想法吗?
Timedeltas
在这里很有用:( 见文档)
从v0.15.0开始,我们引入了一个新的标量类型Timedelta,它是datetime.timedelta的子类,行为方式类似,但允许与np.timedelta64类型兼容,以及一系列自定义表示,解析和属性.
Timedeltas是时间上的差异,以差异单位表示,例如天,小时,分钟,秒.他们可以是积极的和消极的.
df 0 0 2012-08-21 1 2013-02-17 2 2013-02-18 3 2013-03-03 4 2013-03-04
你可以:
pd.to_timedelta(df) TimedeltaIndex(['0 days'], dtype='timedelta64[ns]', freq=None) 0 0 1 180 2 1 3 13 4 1 Name: 0, dtype: int64
或者,您可以使用.shift()
(或.diff()
如@Andy Hayden所示)计算时间点之间的差异:
res = df-df.shift()
要得到:
res.fillna(0) 0 0 0 days 1 180 days 2 1 days 3 13 days 4 1 days
您可以将这些转换timedelta64
dtype
为integer
使用:
res.fillna(0).squeeze().dt.days 0 0 1 180 2 1 3 13 4 1