python - 拆分二级多索引列以在 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))

我尝试在网上查找,但无法找到相关资源。

我认为最接近的例子是在这个 https://stackoverflow.com/a/46247373/6446053 中,但我正在努力只拆分第二级

回答1

您可以循环多索引列并通过解压缩拆分列表来构造第三级索引。

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

相似文章

随机推荐

最新文章