Pandas 系列日期时间到 timedeltas(秒)
Pandas series datetimes to timedeltas (seconds)
我的 Pandas 数据框有一个排序的日期时间列:
print(df.Time)
returns
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
正如sammywemmy所说,你需要:
df1['delta'] = df1.Time - df1.Time.shift()
在虚拟数据帧上:
df1.head(15)
Out[50]:
Time delta
0 2019-10-30 13:15:55 NaT
1 2019-10-30 13:16:11 00:00:16
2 2019-10-30 13:16:27 00:00:16
3 2019-10-30 13:16:54 00:00:27
4 2019-10-30 13:17:22 00:00:28
5 2019-10-30 13:17:23 00:00:01
6 2019-10-30 13:17:29 00:00:06
7 2019-10-30 13:17:44 00:00:15
8 2019-10-30 13:17:46 00:00:02
9 2019-10-30 13:17:48 00:00:02
10 2019-10-30 13:18:47 00:00:59
11 2019-10-30 13:18:52 00:00:05
12 2019-10-30 13:18:53 00:00:01
13 2019-10-30 13:18:59 00:00:06
14 2019-10-30 13:19:07 00:00:08
示例数据帧
0 2019-10-26 13:14:49
1 2019-10-30 13:16:49
2 2019-10-30 13:23:49
3 2019-10-30 13:32:49
4 2019-10-30 13:34:49
5 2019-10-30 13:45:49
6 2019-10-30 13:56:49
Name: Time, Length: 7, dtype: datetime64[ns]
您可以简单地使用 pandas 内置 diff 函数来计算前一行同一列中 DataFrame 元素的差异。
df.Time.diff()
以下命令将导致:
0 NaT
1 4 days 00:02:00
2 0 days 00:07:00
3 0 days 00:09:00
4 0 days 00:02:00
5 0 days 00:11:00
6 0 days 00:11:00
Name: Time, dtype: timedelta64[ns]
我的 Pandas 数据框有一个排序的日期时间列:
print(df.Time)
returns
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
正如sammywemmy所说,你需要:
df1['delta'] = df1.Time - df1.Time.shift()
在虚拟数据帧上:
df1.head(15)
Out[50]:
Time delta
0 2019-10-30 13:15:55 NaT
1 2019-10-30 13:16:11 00:00:16
2 2019-10-30 13:16:27 00:00:16
3 2019-10-30 13:16:54 00:00:27
4 2019-10-30 13:17:22 00:00:28
5 2019-10-30 13:17:23 00:00:01
6 2019-10-30 13:17:29 00:00:06
7 2019-10-30 13:17:44 00:00:15
8 2019-10-30 13:17:46 00:00:02
9 2019-10-30 13:17:48 00:00:02
10 2019-10-30 13:18:47 00:00:59
11 2019-10-30 13:18:52 00:00:05
12 2019-10-30 13:18:53 00:00:01
13 2019-10-30 13:18:59 00:00:06
14 2019-10-30 13:19:07 00:00:08
示例数据帧
0 2019-10-26 13:14:49
1 2019-10-30 13:16:49
2 2019-10-30 13:23:49
3 2019-10-30 13:32:49
4 2019-10-30 13:34:49
5 2019-10-30 13:45:49
6 2019-10-30 13:56:49
Name: Time, Length: 7, dtype: datetime64[ns]
您可以简单地使用 pandas 内置 diff 函数来计算前一行同一列中 DataFrame 元素的差异。
df.Time.diff()
以下命令将导致:
0 NaT
1 4 days 00:02:00
2 0 days 00:07:00
3 0 days 00:09:00
4 0 days 00:02:00
5 0 days 00:11:00
6 0 days 00:11:00
Name: Time, dtype: timedelta64[ns]