猿问

Pandas 系列日期时间到 timedeltas(秒)

我的 Pandas 数据框有一个排序的日期时间列:


print(df.Time)

返回


0      2019-10-30 13:14:49

1      2019-10-30 13:15:25

2      2019-10-30 13:32:44

               ...        

997    2020-02-04 13:53:35

998    2020-02-04 14:22:46

999    2020-02-04 14:52:43

Name: Time, Length: 1000, dtype: datetime64[ns]

我正在尝试的非常简单的事情是派生一个时间增量数组。我试过了:


df.Time[1:-1] - df.Time[0:-2]

这导致:


0         NaT

1      0 days

2      0 days

        ...  

996   0 days

997   0 days

998      NaT

Name: Time, Length: 999, dtype: timedelta64[ns]

结果长度是正确的,但我对结果有点困惑。


似乎这不是对数据帧的 2 个子集执行操作的方法。


什么是正确的方法,是否有一种内置方法可以从排序的日期时间列生成时间增量?


预期的输出类似于:


0      35 seconds

1      1879 seconds

2      1720 seconds

        ...  

996    1805 seconds

997    1854 seconds

998    1791 seconds


翻过高山走不出你
浏览 114回答 2
2回答

一只斗牛犬

示例数据框0   2019-10-26 13:14:491   2019-10-30 13:16:492   2019-10-30 13:23:493   2019-10-30 13:32:494   2019-10-30 13:34:495   2019-10-30 13:45:496   2019-10-30 13:56:49Name: Time, Length: 7, dtype: datetime64[ns]您可以简单地使用 pandas 内置的diff函数,该函数计算上一行同一列中 DataFrame 元素的差异。df.Time.diff() 以下命令将导致:0               NaT1   4 days 00:02:002   0 days 00:07:003   0 days 00:09:004   0 days 00:02:005   0 days 00:11:006   0 days 00:11:00Name: Time, dtype: timedelta64[ns]

江户川乱折腾

正如 sammywemmy 所说,您需要:df1['delta'] = df1.Time - df1.Time.shift()在虚拟数据帧上:df1.head(15)Out[50]:                   Time      delta0  2019-10-30 13:15:55      NaT1  2019-10-30 13:16:11 00:00:162  2019-10-30 13:16:27 00:00:163  2019-10-30 13:16:54 00:00:274  2019-10-30 13:17:22 00:00:285  2019-10-30 13:17:23 00:00:016  2019-10-30 13:17:29 00:00:067  2019-10-30 13:17:44 00:00:158  2019-10-30 13:17:46 00:00:029  2019-10-30 13:17:48 00:00:0210 2019-10-30 13:18:47 00:00:5911 2019-10-30 13:18:52 00:00:0512 2019-10-30 13:18:53 00:00:0113 2019-10-30 13:18:59 00:00:0614 2019-10-30 13:19:07 00:00:08
随时随地看视频慕课网APP

相关分类

Python
我要回答