Разбить столбцы на мультииндекс с отсутствующими столбцами в панд
Это похоже на задачу, которую я задал здесь. Однако я обнаружил, что данные, с которыми я работаю, не всегда согласуются. Например, скажем:
import pandas as pd
df = pd.DataFrame(pd.DataFrame([[1,2,3,4],[5,6,7,8],[9,10,11,12]],columns=["X_a","Y_c","X_b","Y_a"]))
X_a Y_c X_b Y_a
0 1 2 3 4
1 5 6 7 8
2 9 10 11 12
Теперь вы можете видеть, что
X не имеет соответствующего столбца c и Y не имеет соответствующего столбца b. Теперь, когда я хочу создать многоуровневый индекс, Я хочу, чтобы фрейм данных выглядел следующим образом: X Y
a b c a b c
0 1 3 -1 4 -1 2
1 5 7 -1 8 -1 6
2 9 11 -1 12 -1 10
Итак, как вы можете видеть, я хочу разделить таким образом, чтобы все столбцы верхнего уровня имели те же колонки нижнего уровня. Поскольку набор данных является positve, я думаю о заполнении недостающих столбцов с помощью -1, хотя я открыт для предложений по этому поводу. Самое близкое, что я нашел к своей проблеме, было Этот ответ. Однако я не могу заставить его как-то работать с многоуровневым индексом, как в моем предыдущем вопросе. Любая помощь ценится.
1 ответ:
Создайте
MultiIndexи установитеdf.columns.Теперь, используя существующийidx = df.columns.str.split('_', expand=True) idx MultiIndex(levels=[['X', 'Y'], ['a', 'b', 'c']], labels=[[0, 1, 0, 1], [0, 2, 1, 0]]) df.columns = idxMultiIndex, Создайте новый индекс и используйте его дляreindexисходного.idx = pd.MultiIndex.from_product([idx.levels[0], idx.levels[1]]) idx MultiIndex(levels=[['X', 'Y'], ['a', 'b', 'c']], labels=[[0, 0, 0, 1, 1, 1], [0, 1, 2, 0, 1, 2]]) df.reindex(columns=idx, fill_value=-1) X Y a b c a b c 0 1 3 -1 4 -1 2 1 5 7 -1 8 -1 6 2 9 11 -1 12 -1 10
Comments