计算DateTimeIndex的时差

时间:2016-04-12 20:54:30

标签: pandas

我想计算DateTimeIndex

中时间之间的时差
import pandas as pd
p = pd.DatetimeIndex(['1985-11-14', '1985-11-28', '1985-12-14', '1985-12-28'], dtype='datetime64[ns]')

我可以计算两次的时差:

p[1] - p[0]

给出

Timedelta('14 days 00:00:00')

但是p [1:] - p [: - 1]不起作用并给出

DatetimeIndex(['1985-12-28'], dtype='datetime64[ns]', freq=None)

以及未来警告:

FutureWarning: using '-' to provide set differences with datetimelike Indexes is deprecated, use .difference()

如何考虑如何(轻松)计算DateTimeIndex中值之间的时差?为什么它适用于1个值,但不适用于整个DateTimeIndex?

3 个答案:

答案 0 :(得分:13)

使用to_series()DatetimeIndex转换为Series,然后调用diff来计算行间差异:

In [5]:
p.to_series().diff()

Out[5]:
1985-11-14       NaT
1985-11-28   14 days
1985-12-14   16 days
1985-12-28   14 days
dtype: timedelta64[ns]

至于失败的原因,这里的-运算符正在尝试执行不同索引范围的集合差异或交集,您试图从另一个范围中减去一个范围的值diff 1}}确实。

当你执行p[1] - p[0] -正在执行标量减法时,但当你对索引执行此操作时,它会认为您正在执行设置操作

答案 1 :(得分:0)

-运算符正在运行,它只是没有按预期执行。在第二种情况下,它的作用是给出两个日期时间索引的差异,即p[1:]但不在p[:-1]中的值

可能有更好的解决方案,但它可以有效地执行操作元素:

[e - k for e,k in zip(p[1:], p[:-1])]

答案 2 :(得分:0)

我使用None来填充第一个差异值,但我确定您可以弄清楚如何处理这种情况。

>>> [None] + [p[n] - p[n-1] for n in range(1, len(p))]
[None,
 Timedelta('14 days 00:00:00'),
 Timedelta('16 days 00:00:00'),
 Timedelta('14 days 00:00:00')]
顺便说一下,只是为了得到一天的差异:

[None] + [(p[n] - p[n-1]).days for n in range(1, len(p))]
[None, 14, 16, 14]