Pandas中是否支持在其他列内部创建嵌套子列?
核心结论
- 你的猜想不成立,Pandas 原生支持你需要的「父级列聚合子级列」的嵌套结构,本质是列维度的多层索引(MultiIndex),你之前没得到预期结果是字典构造写法不符合解析规则,不是功能无法实现。
- 你需要的目标结构为:一级列名固定为
Investments,二级列名分别为Jhon、Camile,两个子列独立存储对应数据。
原有写法的错误原因
- 第一种
test字典的嵌套逻辑是外层键为用户名、内层键为Investments,Pandas 解析这类嵌套字典生成列时,会默认外层键为一级列名、内层键为二级列名,最终生成Jhon/Investments、Camile/Investments两个并列列,层级顺序和需求完全相反。另外你写的Camile对应值列表长度和Jhon不一致,还会触发长度不匹配的报错。 - 第二种
test2字典虽然外层键为Investments,但直接传入内层字典的写法,会被Pandas识别为单元格的对象值,不会自动解析为二级列结构,同样无法得到目标结果。
正确实现方式
两种最简便的写法如下:
- 直接通过元组形式的列键构造
把多层级的列名写成元组,作为DataFrame构造方法的字典键即可,Pandas会自动识别生成MultiIndex列:import pandas as pd df = pd.DataFrame({ ('Investments', 'Jhon'): [100, 200, 300], ('Investments', 'Camile'): [200, 300, -150] }) - 显式构造MultiIndex列对象
如果后续需要扩展更多父级列,可以提前定义多层列索引再传入数据:# 对齐的二维数据 data = [ [100, 200], [200, 300], [300, -150] ] # 定义两层列结构 columns = pd.MultiIndex.from_tuples([ ('Investments', 'Jhon'), ('Investments', 'Camile') ]) df = pd.DataFrame(data, columns=columns)
两种写法输出的结果完全一致,结构如下:
Investments Jhon Camile 0 100 200 1 200 300 2 300 -150
常用操作提示
- 筛选单个子列时,传入层级元组即可:
df[('Investments', 'Jhon')] - 所有子列的数值长度必须对齐,长度不一致时需要提前用
pd.NA或None填充缺失位,否则会触发构造报错。
内容的提问来源于stack exchange,提问作者FIlipe_Q
相关产品推荐
相关产品推荐

