pandas dataframe `apply` медленный при применении к индексу - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть pandas фрейм данных df с индексом типа DatetimeIndex с параметрами: dtype='datetime64[ns]', name='DateTime', length=324336, freq=None. Фрейм данных имеет 22 столбца, все числовые. Я хочу создать новый столбец Date только с частью даты DateTime (которая будет использоваться для группировки позже).

Моя первая попытка

df['Date'] = df.apply(lambda row: row.name.date(), axis=1)

занимает ок. 13,5 секунд. Но когда я делаю DateTime обычным столбцом, он работает быстрее, даже с учетом операций с индексами:

df.reset_index(inplace=True)
df['Date'] = df.apply(lambda row: row['DateTime'].date(), axis=1)
df.set_index('DateTime')

Это занимает около. 6,3 с, т.е. это в два раза быстрее. Кроме того, применение apply непосредственно к серии (поскольку оно зависит только от одного столбца) еще быстрее:

df.reset_index(inplace=True)
df['Date'] = df['DateTime'].apply(lambda dt: dt.date())
df.set_index('DateTime')

занимает ок. 1,1 с, более чем в 10 раз быстрее, чем исходное решение.

Это подводит меня к моим вопросам:

  1. Применяет ли apply к серии в целом быстрее, чем к фрейм данных?
  2. Использование apply в индексе обычно медленнее, чем в столбцах?
  3. В более общем смысле: в чем преимущество сохранения столбца в качестве индекса? Или, наоборот, что бы я потерял, сбросив индекс перед выполнением каких-либо операций?
  4. Наконец, есть ли еще лучший / более быстрый способ добавления столбца?

1 Ответ

1 голос
/ 18 февраля 2020

Использование DatetimeIndex.date что должно быть более быстрым решением:

df['Date'] = df.index.date

Применяется ли применение к сериям в целом быстрее, чем к кадрам данных?
использование apply для индекса обычно медленнее, чем для столбцов

Я думаю, apply - это циклы под капотом, поэтому он явно медленнее, как pandas method


Более общий вопрос: в чем преимущество сохранения столбца в качестве индекса? Или, наоборот, что бы я потерял, сбросив индекс перед выполнением каких-либо операций?

Вы можете проверить this :

Идентифицирует данные (т.е. предоставляет метаданные) с использованием известных индикаторов, важных для анализа, визуализации и отображения на интерактивной консоли.
Включает автоматическое c и явное выравнивание данных.
Позволяет интуитивно получать и настраивать подмножества набора данных.

Также, если в сериях рабочего времени есть много методов, таких как resample работа с DatetimeIndex, также возможно использование индексация с DatetimeIndex.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...