拆分二级多索引列以在 Pandas 中创建三级列
Split second level multindex column to create three level column in Pandas
给定一个多索引 df
X
E1_ex0 E1_ex2 E2_ex0 E4_ex0
0 3 4 1 1
1 4 3 2 0
我想在_
拆分第二层,然后将第二项作为第三层推送如下
X
E1 E2 E4
ex0 ex2 ex0 ex0
0 3 4 1 1
1 4 3 2 0
我可以知道怎么做吗?
原来的df
可以按照下面的代码创建
arr = np.random.randint(5, size=(2, 4))
tuples = [('X', 'E1_ex0'), ('X', 'E1_ex2'), ('X', 'E2_ex0'), ('X', 'E4_ex0')]
df = pd.DataFrame(data=arr, columns=pd.MultiIndex.from_tuples(tuples))
我尝试在网上查找,但找不到相关资源。
我认为最接近的例子就是这个,但我很难只拆分第二层
您可以循环多索引列并通过拆包拆分列表来构造三级索引。
tuples = [(index[0], *index[1].split('_')) for index in df.columns]
df2 = pd.DataFrame(data=df.values, columns=pd.MultiIndex.from_tuples(tuples))
# or without creating new DataFrame
df.columns = pd.MultiIndex.from_tuples([(index[0], *index[1].split('_')) for index in df.columns])
print(df2)
X
E1 E2 E4
ex0 ex2 ex0 ex0
0 1 0 3 3
1 0 1 4 3
给定一个多索引 df
X
E1_ex0 E1_ex2 E2_ex0 E4_ex0
0 3 4 1 1
1 4 3 2 0
我想在_
拆分第二层,然后将第二项作为第三层推送如下
X
E1 E2 E4
ex0 ex2 ex0 ex0
0 3 4 1 1
1 4 3 2 0
我可以知道怎么做吗?
原来的df
可以按照下面的代码创建
arr = np.random.randint(5, size=(2, 4))
tuples = [('X', 'E1_ex0'), ('X', 'E1_ex2'), ('X', 'E2_ex0'), ('X', 'E4_ex0')]
df = pd.DataFrame(data=arr, columns=pd.MultiIndex.from_tuples(tuples))
我尝试在网上查找,但找不到相关资源。
我认为最接近的例子就是这个
您可以循环多索引列并通过拆包拆分列表来构造三级索引。
tuples = [(index[0], *index[1].split('_')) for index in df.columns]
df2 = pd.DataFrame(data=df.values, columns=pd.MultiIndex.from_tuples(tuples))
# or without creating new DataFrame
df.columns = pd.MultiIndex.from_tuples([(index[0], *index[1].split('_')) for index in df.columns])
print(df2)
X
E1 E2 E4
ex0 ex2 ex0 ex0
0 1 0 3 3
1 0 1 4 3