Ускорение «включено» для фрейма данных

#python #dataframe #indexing

#python #фрейм данных #индексирование

Вопрос:

Учитывая фрейм данных, я хотел бы добавить строку, если ее уже нет в DF.

 if state not in df.index:
    # append new state DataFrame
    df = df.append(pd.Series([0] * len(self.actions), index=df.columns, name=state))
  

state это строка, подобная этой [0 1 12 36 67 0 14 5 6 4] (список из 10 записей, передаваемый в виде строки).

Для первых нескольких добавленных строк это занимает в среднем около 0,0045 секунды. Наличие более 10000 строк уже делает его значительно медленнее, примерно на 0,0623 секунды, а с более чем 100 000 строк оно становится чем-то вроде 0,1364 секунды…

Есть ли какой-либо способ ускорить проверку, если индекс уже существует? Я новичок в python, но, может быть, есть способ сохранить индекс в ОЗУ и проверить его для повышения производительности? Может быть, хеширование индекса ускорит его, или, может быть, их комбинация?

Любой намек высоко ценится!

Комментарии:

1. Почему бы не создать DataFrame , объединить их и удалить дубликаты?

2. Я нахожу 0.1364 не слишком медленным, конечно, не для 100K строк. Возможно, это зависит от того, как часто вы запускаете это, например, в цикле, но в этом случае поиск другого способа кодирования этого может быть более подходящим решением.

3. Ну, он выполняется в цикле и вызывается более 10 раз в секунду, и, поскольку это не единственное, что происходит, это узкое место кода. Я понимаю, что это не так уж плохо, но, как новичку, это кажется очень неэффективным способом такой проверки

4. Отсортирован ли ваш индекс? Это хорошо подходит для поиска. Но @gmds, вероятно, лучшая идея, если вы можете дождаться конца, чтобы удалить дубликаты.