#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(...)