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

如何通过pd.MultiIndex.from_product生成扁平结构的三级MultiIndex

解决MultiIndex.from_product生成嵌套元组索引的问题

你当前的代码用pd.MultiIndex.from_product将terms和嵌套元组列表tuples组合,得到的是二级索引(第二级为嵌套元组),但实际需要的是三级扁平索引(每个索引元素为(Term, Category, Subcategory)形式的三元组),可以通过以下两种方法解决:

方法1:拆分维度后直接生成三级笛卡尔积

将原tuples拆分为两个独立的维度列表,再和terms一起传入from_product,直接生成三级扁平索引:

import pandas as pd

terms = ['2021C', '2022A', '2020C', '2021A', '2019A', '2019B', '2019C',
       '2020A', '2021B', '2020B']

tuples = [('Academic Info','Degree'),
('Academic Info','Major'),
('Demographic Info','Military'),
('Demographic Info','Army')
]

# 拆分嵌套元组为两个独立维度
categories = [item[0] for item in tuples]
subcategories = [item[1] for item in tuples]

# 生成三级扁平MultiIndex
multiindex = pd.MultiIndex.from_product(
    [terms, categories, subcategories],
    names=['Term', 'Category', 'Subcategory']
)

方法2:展开已生成的嵌套索引

如果不想拆分原tuples,可以先生成二级嵌套索引,再将嵌套元组展开为扁平三元组,重新构造MultiIndex:

import pandas as pd

terms = ['2021C', '2022A', '2020C', '2021A', '2019A', '2019B', '2019C',
       '2020A', '2021B', '2020B']

tuples = [('Academic Info','Degree'),
('Academic Info','Major'),
('Demographic Info','Military'),
('Demographic Info','Army')
]

# 先生成带嵌套元组的二级索引
temp_index = pd.MultiIndex.from_product([terms, tuples], names=['Term', '_'])
# 展开嵌套元组为扁平三元组
flat_index_tuples = [(term, cat, subcat) for term, (cat, subcat) in temp_index]
# 生成目标三级MultiIndex
multiindex = pd.MultiIndex.from_tuples(flat_index_tuples, names=['Term', 'Category', 'Subcategory'])

两种方法最终生成的索引结构一致,示例输出如下:

MultiIndex([('2021C', 'Academic Info',    'Degree'),
            ('2021C', 'Academic Info',     'Major'),
            ('2021C', 'Demographic Info', 'Military'),
            ...],
           names=['Term', 'Category', 'Subcategory'])

内容的提问来源于stack exchange,提问作者Flying Spaghetti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 23:06:27