Pandas есть ли Pythoni c способ добавить новый иерархический столбец в плоский столбец Dataframe - PullRequest
1 голос
/ 02 мая 2020

В 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

Но это плохо. Почему поднимать и опускать иерархии такая боль? Чего мне не хватает?

1 Ответ

2 голосов
/ 02 мая 2020

Давайте попробуем

df.columns=pd.MultiIndex.from_product([df.columns,['']])
df.loc[:,('levelone', 'levelone - d')]=4
df
      A  B  C     levelone
              levelone - d
pk                        
key1  1  2  3            4
key2  1  2  3            4
...