Pandas 时间(不是日期)差异而不是对象

Pandas Time (not Date) differences and not as object

我想将我的时间戳列转换为 ML 模型的回归器。我需要它是一个样条 - 一个连续变量(设计矩阵 X 中的一列),而不是一次性编码离散化间隔。

在我的原始数据中,我只有一个字符串形式的时间戳可供我使用,并且使用一些 pandas 技巧我能够得到我需要的东西。

但是,我在创建时差时遇到问题,我想计算从最小列的值到当前行的值的时间距离。

我在下面证明简单的例子:

import pandas as pd

# Create dataset
df = pd.DataFrame({"Time": ["071323", "081326", "101405", "111545", "124822", "131112"]})

df

df = df.assign(timestamp=lambda d: pd.to_datetime(d["Time"], format="%H%M%S").dt.time)

df.assign(time_trend_from_min = lambda d: d['timestamp'] - d['timestamp'].min())

# The values should be 1 hour, 0 minutes and 3 seconds etc.

我遇到的第二个问题是,当我只使用 pd.to_datetime(d["Time"], format="%H%M%S").dt.time 转换它时,它被存储为 object 类型,因此例如patsy 会虚拟编码每一个唯一的值。我需要创建一维时间序列的差异,在 X 轴上我们有索引,在 y 轴上我们有与最小值的时间距离。

我确定它确实需要 2 行代码,但我无法自行破解它

你可以试试:

s=pd.to_datetime(df['Time'],format="%H%M%S")
df['time_trend_from_min']=s-s.min()

df的输出:

    Time    timestamp   time_trend_from_min
0   071323  07:13:23    0 days 00:00:00
1   081326  08:13:26    0 days 01:00:03
2   101405  10:14:05    0 days 03:00:42
3   111545  11:15:45    0 days 04:02:22
4   124822  12:48:22    0 days 05:34:59
5   131112  13:11:12    0 days 05:57:49