Удалять дублированные имена индексов в кадре данных MultiIndex - PullRequest
0 голосов
/ 22 марта 2020

После выполнения некоторой операции с набором данных у меня получился кадр данных, подобный этому:

df = pd.DataFrame([1, 2, 3, 4, 5], 
              index = pd.MultiIndex.from_arrays(np.array([[0, 0, 1, 1, 1],
                                                          [1448, 1448, 1448, 1448, 1448],
                                                          [0, 0, 1, 1, 1],
                                                          [1448, 1448, 1448, 1448, 1448],
                                                          ['22', '11', '14', '15', '19']]), 
                                                names = ['meas_id', 'hec_id', 'meas_id', 'hec_id', 'lab_id']))

print(df)

                                      0
meas_id hec_id meas_id hec_id lab_id   
0       1448   0       1448   22      1
                              11      2
1       1448   1       1448   14      3
                              15      4
                              19      5

Как вы можете заметить, столбцы meas_id и hec_id MultiIndex дублируются. Я мог бы использовать reset_index([3, 4], drop=True), чтобы удалить их, но этот результирующий фрейм данных на самом деле является частью списка фреймов данных, где некоторые из них имеют дублированные столбцы индекса, а некоторые - нет. Поэтому мой вопрос: как я могу отбросить дублированные столбцы индекса из MultiIndex?

Обратите внимание, что этот вопрос относится к дубликатам в столбцах, а не в строке.

1 Ответ

2 голосов
/ 22 марта 2020

Для решения, которое обобщает удаление двойных имен индексов, вы можете сделать:

import numpy as np

ixs = np.flatnonzero(pd.Index(df.index.names).duplicated()).tolist()
df.reset_index(ixs, drop=True)

                       0
meas_id hec_id lab_id   
0       1448   22      1
               11      2
1       1448   14      3
               15      4
               19      5
...