将列分配给层次结构更高的 Multiindex 级别

Assigning columns to a hierarchical higher Multiindex level

我有一个看起来有点像这样的数据框:

   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​​x 和 Ay 作为 x 和 y 在 A 下

通过 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 的输出:

   A      B
   x   y  x   y
0  1  20  2  20
1  3  21  5  22
2  4  20  7  25

您可以使用多个构造函数之一手动构造 pandas.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

让我们使用正则表达式和 split 以及 expand=True 参数:

df.columns = df.columns.str.split('(?<=[A-Z])', expand=True)

输出:

   A      B    
   x   y  x   y
0  1  20  2  20
1  3  21  5  22
2  4  20  7  25