如何在pandas中通过str.extract为DataFrame创建行列多层索引
解决方案
你可以通过str.extract搭配正则捕获组提取国家、行业两个字段,再转换为pandas多层索引,具体实现如下:
完整实现代码
import pandas as pd # 示例数据 idx = ['CAN_agr', 'CAN_ser', 'USA_agr', 'USA_ser', 'MEX_agr', 'MEX_ser'] sample = pd.DataFrame( [[1, 2, 3, 4, 5 ,6], [7, 8, 9, 10, 11, 12], [13, 14, 15, 16, 17, 18], [19, 20, 21, 22, 23, 24], [25, 26, 27, 28, 29, 30], [31, 32, 33, 34, 35, 36]], index = idx, columns=idx ) # 处理行多层索引 sample.index = pd.MultiIndex.from_frame( sample.index.str.extract(r'(?P<国家>\w+)_(?P<行业>\w+)') ) # 处理列多层索引 sample.columns = pd.MultiIndex.from_frame( sample.columns.str.extract(r'(?P<国家>\w+)_(?P<行业>\w+)') ) # 查看结果 print(sample)
逻辑说明
- 正则表达式中的两个括号为捕获组,分别匹配下划线前后的字符串,对应国家、行业两个索引层级
str.extract会按捕获组的顺序返回两列DataFrame,传入pd.MultiIndex.from_frame即可直接生成多层索引- 捕获组的
?P<层级名>写法可以直接给多层索引的层级命名,不需要命名可以省略,改为r'(\w+)_(\w+)'即可
内容的提问来源于stack exchange,提问作者David Kim
相关产品推荐
相关产品推荐

