В Pandas манипулирование индексами иерархических столбцов чувствует себя сложнее, чем нужно, поэтому я предполагаю, что я что-то упускаю.
Например.
pd.DataFrame(dict(A=1, B=2, C=3), index=pd.Index(['key1', 'key2'], name='pk'))
A B C
pk
key1 1 2 3
key2 1 2 3
Я хочу добавить новый столбец, но в новой иерархии.
df['levelone', 'levelone - d'] = 4
Добавляет ключ кортежа ('levelone', 'levelone-d) в индекс плоского столбца, но не добавляет новую выровненную иерархию. Я не могу получить доступ к этому столбцу, используя df['levelone']
.
Есть ли лучший способ сделать это, чем использовать что-то хакерское, например
multiindex = pd.MultiIndex.from_tuples(
[(col_name, '') if isinstance(col_name, str) else col_name for col_name in df.columns]
)
df.columns = multiindex
Это выдаст желаемый вывод
A B C levelone
levelone - d
pk
key1 1 2 3 4
key2 1 2 3 4
Но это плохо. Почему поднимать и опускать иерархии такая боль? Чего мне не хватает?