我有一个数据帧,该数据帧具有一个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
,我想用下一个小时值,即2019-05-18 00:51:23.630583
interpolate()
或interpolate(method='time')
不执行任何操作,
shift(-1, freq='h')
产生:
NotImplementedError:类型RangeIndex不支持
我很确定必须有一些简单的方法来进一步扩展日期时间范围。
答案 0 :(得分:2)
为偏移的列添加偏移量
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]
答案 1 :(得分:1)
尝试使用此功能:
def fill_in_nat(row):
if pd.isnull(row['ts_end']) == True:
row['ts_end'] = row['ts_start']+timedelta(hours=1)
else:
pass
return row
然后将其应用于DataFrame:
df = df.apply(lambda x: fill_in_nat(x), axis=1)