将列分配给更高层次的多索引级别
我有一个看起来有点像这样的数据框:
Ax Ay Bx By
0 1 20 2 20
1 3 21 5 22
2 4 20 7 25
并且我想手动定义 Ax 和 Ay 具有 A 的更高层次的 MultiIndex 级别(并且对 B 也这样做)。这样数据框看起来像这样:
A B
x y x y
0 1 20 2 20
1 3 21 5 22
2 4 20 7 25
A B
x y x y
0 1 20 2 20
1 3 21 5 22
2 4 20 7 25
所以我正在寻找的是一个声明,它说:
Ax 和 Ay 在 A 下作为 x 和 y
回答
通过split()和droplevel():
df.columns=df.columns.str.split('([A-Z])',expand=True).droplevel(0)
或者
通过pd.MultiIndex.from_arrays():
df.columns=pd.MultiIndex.from_arrays([['A','A','B','B'],['x','y','x','y']])
的输出df:
回答
您可以pandas.MultiIndex使用多个构造函数之一手动构造一个。从文档:
-
MultiIndex.from_arrays
将数组列表转换为 MultiIndex。 -
MultiIndex.from_product
从迭代的笛卡尔积创建一个 MultiIndex。 -
MultiIndex.from_tuples
将元组列表转换为 MultiIndex。 -
MultiIndex.from_frame
从 DataFrame 创建 MultiIndex。
所有这些都很有用,我会检查它们以了解它们的用例。对于你的情况,我认为pd.MultiIndex.from_tuples可能会成功:
In [4]: list_of_split_tuples = list(map(tuple, df.columns.values))
In [5]: df.columns = pd.MultiIndex.from_tuples(list_of_split_tuples)
In [6]: df
Out[6]:
A B
x y x y
0 1 20 2 20
1 3 21 5 22
2 4 20 7 25