Сдвиг панд и экстраполировать столбец даты и времени - PullRequest
1 голос
/ 17 мая 2019

У меня есть фрейм данных с 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

Я почти уверен, что должно быть что-то простое, чтобы расширить диапазон дат и времени.

Ответы [ 2 ]

2 голосов
/ 17 мая 2019

Добавить смещение к смещенному столбцу

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 голос
/ 17 мая 2019

Попробуйте эту функцию:

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

А затем примените ее к кадру данных:

df = df.apply(lambda x: fill_in_nat(x), axis=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...