python - Pandas 移位和推断日期时间列

标签 python pandas datetime

我有一个包含 1 小时周期 DateTime 列 ts_start 和移动一列 ts_end 的数据框:

import pandas as pd
from datetime import datetime, timedelta
now = datetime.now()
d = pd.date_range(now, now + timedelta(hours=7), freq='h')

np.random.seed(seed=1111)
df = pd.DataFrame({'ts_start': d, 'col2': range(len(d))})
df = df.assign(ts_end=df['ts_start'].shift(-1))
print(df)
                    ts_start  col2                     ts_end
0 2019-05-17 16:51:23.630583     0 2019-05-17 17:51:23.630583
1 2019-05-17 17:51:23.630583     1 2019-05-17 18:51:23.630583
2 2019-05-17 18:51:23.630583     2 2019-05-17 19:51:23.630583
3 2019-05-17 19:51:23.630583     3 2019-05-17 20:51:23.630583
4 2019-05-17 20:51:23.630583     4 2019-05-17 21:51:23.630583
5 2019-05-17 21:51:23.630583     5 2019-05-17 22:51:23.630583
6 2019-05-17 22:51:23.630583     6 2019-05-17 23:51:23.630583
7 2019-05-17 23:51:23.630583     7                        NaT

我想用下一个小时值填充 NaT,即 2019-05-18 00:51:23.630583

interpolate()interpolate(method='time') 什么都不做,

shift(-1, freq='h') 产生:

NotImplementedError:类型 RangeIndex 不支持

我很确定一定有一些简单的方法可以进一步扩展日期时间范围。

最佳答案

向移位的列添加一个偏移量

df.ts_end.fillna(df.ts_end.shift() + pd.offsets.Hour(1))

0   2019-05-17 08:10:39.380197
1   2019-05-17 09:10:39.380197
2   2019-05-17 10:10:39.380197
3   2019-05-17 11:10:39.380197
4   2019-05-17 12:10:39.380197
5   2019-05-17 13:10:39.380197
6   2019-05-17 14:10:39.380197
7   2019-05-17 15:10:39.380197
Name: ts_end, dtype: datetime64[ns]

关于python - Pandas 移位和推断日期时间列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56188004/

相关文章:

python - pandas str.extract 带有附加逻辑(lambda?)

python - 对 Pandas 列中的列表进行操作

python - 在Mac上的pandas中打开csv文件时出现utf-8错误

python - 在 Python 中生成 RFC 3339 时间戳

查找在 2 个字符串中不匹配的第一个索引的 pythonic 方法

python - Powershell 退出 Python 环境

javascript - 如何仅显示日期时间(分和秒)

python - 日期时间范围中前一天/前一个月/前一年的第一个可用日期

python - 如何在 C++ 中运行 Python 文件?

python - 在 Python for 循环中创建一个计数器