Учитывая DataFrame (d
) со столбцами MultiIndex, я хотел бы установить другой DataFrame (d2
) в качестве одного из «многостолбцов», чтобы верхний уровень имел некоторую метку, а метки второго уровня соответствовали оригиналу:
nr.seed(0)
abc = ['a', 'b', 'c']
mi = pd.MultiIndex.from_product([['A'], abc])
d = DataFrame(np.random.randint(0, 10, (4, 3)), columns=mi)
d
A
a b c
0 5 0 3
1 3 7 9
2 3 5 2
3 4 7 6
d2 = DataFrame(np.random.randint(0, 10, (4, 3)), columns=abc)
d2
a b c
0 8 8 1
1 6 7 7
2 8 1 5
3 9 8 9
Если возможно, я хотел бы присоединиться к ним, используя один встроенный метод, который выполняет следующий цикл forloop:
for c2 in d2:
d['B', c2] = d2[c2]
d
A B
a b c a b c
0 5 0 3 8 8 1
1 3 7 9 6 7 7
2 3 5 2 8 1 5
3 4 7 6 9 8 9
Для DataFrame с одноуровневым столбцом:
d3 = d.copy()
d3.columns = d3.columns.droplevel(0)
d3 = d3.rename(columns=dict(zip('abc', 'def')))
d3
d e f
0 5 0 3
1 3 7 9
2 3 5 2
3 4 7 6
Я могу сделать следующее:
d3[d2.columns] = d2
d3
d e f a b c
0 5 0 3 8 8 1
1 3 7 9 6 7 7
2 3 5 2 8 1 5
3 4 7 6 9 8 9
Но когда я пробую это с MultiIndexed DataFrame, я получаю ошибки:
d['B', tuple(d2.columns)] = d2
=> ValueError: Wrong number of items passed 3, placement implies 1
d['B'][tuple(d2.columns)] = d2
=> KeyError: 'B'
Есть ли встроенный метод для этого? (В основном делайте это для нескольких столбцов одновременно) .