Pandas 如何从多级groupby结果提取层级映射信息
实现方法
你之前的卡点源于对MultiIndex结构的使用误区:带两层索引的Series完全可以直接按索引层级做二次分组,根本不需要通过reset_index把索引拆成普通列、再做冗余的DataFrame转换。之前尝试失败,大概率是在拿到聚合结果后先执行了reset_index破坏了原有索引结构,反而绕了远路。
核心代码两步就能完成,完全复用你已经验证正确的聚合逻辑:
- 先保留两级聚合结果,不要提前破坏MultiIndex结构:
s = df.groupby(['barcode','box_number'])['serials'].apply(' '.join) - 直接按barcode所在的索引层级(也就是MultiIndex的0层)做分组,把每个barcode下的子序列转成box_number为key、拼接serials为value的字典,最后整体转成目标结构:
result = s.groupby(level=0).apply(lambda g: g.to_dict()).to_dict()
执行后得到的result完全匹配你需要的结构:
{'1000': {'10': '800 801', '11': '802'}, '2000': {'12': '803 804 805 806'}, '3000': {'13': '807', '14': '808', '15': '809'}}
可以直接拿来生成层级XML结构,不需要额外的格式清洗。
内容的提问来源于stack exchange,提问作者Gnudiff
相关产品推荐
相关产品推荐

