熊猫时间(不是日期)差异而不是作为对象

时间:2021-07-18 14:27:31

标签: pandas datetime datediff spline patsy

我想将时间戳列转换为 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 行代码,但是我无法自己破解它

1 个答案:

答案 0 :(得分:1)

你可以试试:

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