You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将MultiIndex某层级的字符串拆分以新增层级?

问题描述

我想要使用分隔符拆分MultiIndex中某一层级的字符串值,从而在MultiIndex中新增一个层级。

我的原始DataFrame如下:

import pandas as pd
import numpy as np
from functools import reduce

pd.DataFrame(
    np.ones((5, 4)),
    columns=pd.MultiIndex.from_tuples(
        zip(
            list(reduce(lambda x, y: f"{x}_{y}", tup) for tup in zip(range(4), range(4))),
            list(map(str, range(4))),
        )
    ),
    index=range(5),
)

原始表格输出:

('0_0', '0')('1_1', '1')('2_2', '2')('3_3', '3')
01.01.01.01.0
11.01.01.01.0
21.01.01.01.0
31.01.01.01.0
41.01.01.01.0

我该如何高效地使用_分隔符拆分第0层级,使我的MultiIndex列变为3个层级?预期效果如下:

(0, 0, 0)(1, 1, 1)(2, 2, 2)(3, 3, 3)
01.01.01.01.0
11.01.01.01.0
21.01.01.01.0
31.01.01.01.0
41.01.01.01.0

不知道如何在Markdown表格中设置多个表头,元组的长度代表层级数。这是pd.DataFrame.to_markdown的输出结果

解决方案

直接通过拆分目标层级并重组MultiIndex即可实现,以下是两种高效写法:

写法一:遍历重组

适合需要自定义处理每个元素的场景:

import pandas as pd
import numpy as np
from functools import reduce

# 构建原始DataFrame
df = pd.DataFrame(
    np.ones((5, 4)),
    columns=pd.MultiIndex.from_tuples(
        zip(
            list(reduce(lambda x, y: f"{x}_{y}", tup) for tup in zip(range(4), range(4))),
            list(map(str, range(4))),
        )
    ),
    index=range(5),
)

# 遍历列索引,拆分第0层并重组为三元组
new_columns = []
for col_tuple in df.columns:
    split_part = col_tuple[0].split('_')
    # 拼接成新的三层索引,按需转换数据类型
    new_tuple = (int(split_part[0]), int(split_part[1]), int(col_tuple[1]))
    new_columns.append(new_tuple)

# 更新列索引
df.columns = pd.MultiIndex.from_tuples(new_columns)

写法二:向量化处理

更高效的批量处理方式,适合大数据量场景:

# 拆分第0层为两个新列
split_level0 = df.columns.get_level_values(0).str.split('_', expand=True).astype(int)
# 拼接原第1层,生成新的三层MultiIndex
new_columns = pd.MultiIndex.from_arrays([
    split_level0[0],
    split_level0[1],
    df.columns.get_level_values(1).astype(int)
])

# 更新列索引
df.columns = new_columns

两种方法都能将原二级列索引转换为三级,达到预期效果。

内容的提问来源于stack exchange,提问作者Stalin Thomas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 18:33:25