将列分配给层次结构更高的 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
所以我要找的是这样的声明:
Ax 和 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
。来自文档:
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
让我们使用正则表达式和 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
我有一个看起来有点像这样的数据框:
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
所以我要找的是这样的声明:
Ax 和 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
。来自文档:
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
让我们使用正则表达式和 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