当从 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
主要来自 Pandas 的文档,我做了:
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
好吧,这就是我想要的,但我不明白为什么我必须转置两次。好像没什么用。
最佳答案
您可以自己创建MultiIndex
,然后删除该行。从您的起始 df
开始:
import pandas as pd
df.columns = pd.MultiIndex.from_arrays([df.iloc[0], df.columns], names=[None]*2)
df = df.iloc[1:].reset_index(drop=True)
A B A B
k k m m
0 1 2 3 4
关于python - 为什么转置数据以获得多索引数据帧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55635870/