Почему в set_index нет параметра добавления?

#pandas

Вопрос:

df.set_index() имеет параметр добавления для добавления столбцов к существующему индексу. Но нет параметра prepend для добавления столбцов к существующему индексу. Почему нет параметра добавления? Единственный известный мне способ обойти эту проблему — использовать .reorder_levels() после использования .set_index() :

 df.set_index('new_col', append=True, inplace=True)
df = df.reorder_levels(["new_col", "old_index"])
 

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

1. «Почему нет параметра добавления?» это было бы в первую очередь дизайнерским решением, и я не знаю, сможет ли кто-либо за пределами разработчиков библиотеки ответить на этот вопрос.

2. c.f. проблема pandas # 26742 — ENH: разрешить добавление индексов с помощью set_index и закрытого PR #26724 — Установить индекс с помощью prepend

Ответ №1:

По словам одного из разработчиков pandas (курсив добавлен):

Я не думаю, что наличие append и prepend делает API хорошим, тем более, что теперь он не охватывает вариант использования, когда пользователь может захотеть вставить в середину мультииндекса. Первоначальная мысль заключается в том, что предоставление level в качестве int наряду с append may имеет наибольший смысл, хотя все еще не идеально IMO.

Таким образом, разработчики готовы рассмотреть этот тип функциональности set_index , просто не через prepend параметр. Обсуждение соответствующего API было продолжено в выпуске # 26742.


Также обратите внимание, что выпуск # 26742 предлагает пару альтернатив в дополнение к reorder_levels :

  • .reset_index().set_index(...)
  • .set_index(append=True).swaplevel(...)
  • .set_index(append=True).reorder_levels(...)