首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算DateTimeIndex的时间差

计算DateTimeIndex的时间差
EN

Stack Overflow用户
提问于 2016-04-13 04:54:30
回答 3查看 11.3K关注 0票数 19

我想计算DateTimeIndex中时间之间的时间差

代码语言:javascript
复制
import pandas as pd
p = pd.DatetimeIndex(['1985-11-14', '1985-11-28', '1985-12-14', '1985-12-28'], dtype='datetime64[ns]')

我可以计算出两次的时间差:

代码语言:javascript
复制
p[1] - p[0]

给出

代码语言:javascript
复制
Timedelta('14 days 00:00:00')

但是p1:- p:-1不起作用,并给出

代码语言:javascript
复制
DatetimeIndex(['1985-12-28'], dtype='datetime64[ns]', freq=None)

以及未来的警告:

代码语言:javascript
复制
FutureWarning: using '-' to provide set differences with datetimelike Indexes is deprecated, use .difference()

有没有想过如何(轻松地)计算DateTimeIndex中值之间的时间差?为什么它只适用于1个值,而不适用于整个DateTimeIndex?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-04-13 05:28:47

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

代码语言:javascript
复制
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所做的。

当您执行p[1] - p[0]时,-正在执行标量减法,但是当您在索引上执行此操作时,它会认为您正在执行集合操作

票数 30
EN

Stack Overflow用户

发布于 2016-04-13 05:16:52

-运算符正在工作,只是没有做您期望的事情。在第二种情况下,它的作用是给出两个datetime索引的差值,即在p[1:]中但不在p[:-1]中的值

可能有一个更好的解决方案,但它将工作执行操作元素明智:

代码语言:javascript
复制
[e - k for e,k in zip(p[1:], p[:-1])]
票数 1
EN

Stack Overflow用户

发布于 2016-04-13 06:20:41

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

代码语言:javascript
复制
>>> [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')]

顺便说一句,为了得到一天的差值:

代码语言:javascript
复制
[None] + [(p[n] - p[n-1]).days for n in range(1, len(p))]
[None, 14, 16, 14]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36583859

复制
相关文章

相似问题

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