Создать новую отметку времени в pandas на основе вхождения в другом столбце - PullRequest
1 голос
/ 22 марта 2020

У меня есть столбец dataframe со случайными временными метками и значениями NaT между ними:

timestamp             
01-01-2018 13:12:48
NaT
NaT
NaT
04-01-2018 08:15:12
NaT
Nat

Я хочу создать еще один столбец, который начинает отсчет с 0, как только в столбце меток времени появится новая метка времени ( col_a). Я не возражал бы, если бы этот столбец был объектом отметки времени, но без даты (col_B). Это возможно?

timestamp            col_A  col_B             
01-01-2018 13:12:48  0      00:00:00
NaT                  1      00:01:00
NaT                  2      00:02:00
NaT                  3      00:03:00
04-01-2018 08:15:12  0      00:00:00
NaT                  1      00:01:00
Nat                  2      00:02:00

1 Ответ

1 голос
/ 22 марта 2020

Это проблема островов и разрывов: каждый раз, когда timestamp не равен нулю, он создает новый остров. Обычно вы решаете эти проблемы с помощью кумулятивной суммы.

Попробуйте:

islands = df['timestamp'].notnull().cumsum()
df['col_A'] = df.groupby(islands).cumcount()
df['col_B'] = pd.to_timedelta(df['col_A'], unit='minute')
...