Я немного запутался с ориентацией данных при создании мультииндексированного DataFrame из DataFrame.Я импортирую данные с read_excel()
и начинаю с чего-то вроде:
import pandas as pd
df = pd.DataFrame([['A', 'B', 'A', 'B'], [1, 2, 3, 4]],
columns=['k', 'k', 'm', 'm'])
df
Out[3]:
k k m m
0 A B A B
1 1 2 3 4
Я хочу мультииндексировать это и получить:
A B A B
k k m m
0 1 2 3 4
В основном из документа Панда, я сделал:
arrays = df.iloc[0].tolist(), list(df)
tuples = list(zip(*arrays))
multiindex = pd.MultiIndex.from_tuples(tuples, names=['topLevel', 'downLevel'])
df = df.drop(0)
Если я попытаюсь
df2 = pd.DataFrame(df.values, index=multiindex)
(...)
ValueError: Shape of passed values is (4, 1), indices imply (4, 4)
, то мне придется переставить значения:
df2 = pd.DataFrame(df.values.T, index=multiindex)
df2
Out[11]:
0
topLevel downLevel
A k 1
B k 2
A m 3
B m 4
В последний раз я переставлю этот кадр данных, чтобы получить:
df2.T
Out[12]:
topLevel A B A B
downLevel k k m m
0 1 2 3 4
Хорошо, это то, что я хочу, но я не понимаю, почему я должен транспонировать 2 раза.Кажется бесполезным.