datetime64[ns] to timestamp unix (секунды)

Есть датафрейм, в котором индекс это объект DatetimeIndex, он же формат даты datetime64[ns]

                       A  B  C
'2022-12-14 12:00:00'  1  2  3
'2022-12-14 12:00:01'  5  6  7 

Необходимо из этого индекса сделать столбец 'timestamp_s', в котором собственно будет храниться время из индексов в формате timestamp unix секунды.

На ум пришло грубое решение:

df['timestamp_s'] = df.index.astype('int32')
df['timestamp_s'] = df['timestamp_s'].apply(lambda x: (x / 1000000000).__int__())

Собственно, сначала переводим datetime64[ns] в формат int32, ну и затем каждый элемент делим на 10000000, так как после конвертации у нас получились наносекунды. Интересует вопрос, думаю что есть дефолтная функция, которая сделает конвертацию гораздо быстрее, но как она выглядит?

p.s. Данное решение занимает ~53мс, датафрейм состоит из 2млн+ строк и 4 столбцов формата int32


Ответы (1 шт):

Автор решения: strawdog

Вероятно, много времени отнимает имплицитный цикл apply, который здесь, кстати, не нужен:

df['timestamp_s'] = df.index.view('int64')/(10**9)

Обратите внимание на модификатор .view(), который теперь разработчики pandas рекомендуют использовать в подобных случаях вместо .astype().

→ Ссылка