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

pandas如何按字典列表parent键值分组DataFrame多级列头

实现方法

要实现parent为一级列头、asin为二级列头的多级表头透视表,无需修改原有透视逻辑,只需在透视完成后基于数据内的parent-asin对应关系重构列索引即可,核心操作如下:

  • 先修正原始字典的语法问题(缺失的字符串引号、空volume值补全),避免DataFrame初始化报错
  • 提取数据中唯一的asin和parent映射关系,作为后续多级列的生成依据
  • 执行原有pivot_table透视逻辑,得到asin为单层列头的结果
  • 基于映射关系把单层列转换为(parent, asin)结构的MultiIndex多级列,按需排序即可

完整代码

import pandas as pd

# 修正语法错误后的原始测试数据
my_lists = [
    {'rank': 2, 'keyword_name': 'mens wallet', 'volume': 456677, 'asin': 'B01MG0ORBL','parent': 'parent1'},
    {'rank': 18, 'keyword_name': 'mens wallet', 'volume': 456677, 'asin': 'B0735C9RDZ','parent': 'parent1'},
    {'rank': 21, 'keyword_name': 'mens wallet', 'volume': 456677, 'asin': 'B07FPVR858','parent': 'parent2'},
    {'rank': 126, 'keyword_name': 'mens wallet', 'volume': 456677, 'asin': 'B01MG0ORBL','parent': 'parent2'},
    {'rank': 128, 'keyword_name': 'mens wallet', 'volume': 456677, 'asin': 'B0735C9RDZ','parent': 'parent2'},
    {'rank': 136, 'keyword_name': 'mens wallet', 'volume': 456677, 'asin': 'B07FPVR858','parent': 'parent2'},
    {'rank': 19, 'keyword_name': 'leather wallets', 'volume': 23, 'asin': 'B0735C9RDZ','parent': 'parent2'},
    {'rank': 10, 'keyword_name': 'wallets for men', 'volume': 566, 'asin': 'B07FPVR858','parent': 'parent2'},
    {'rank': 16, 'keyword_name': 'wallets for men', 'volume': 566, 'asin': 'B0735C9RDZ','parent': 'parent2'},
]

df = pd.DataFrame(my_lists)

# 提取asin-parent唯一映射
asin_parent_map = df[['asin', 'parent']].drop_duplicates().set_index('asin')['parent'].to_dict()

# 原有透视逻辑
pivot_df = df.pivot_table(
    index=['keyword_name','volume'], 
    columns='asin', 
    values='rank', 
    aggfunc=list
)

# 重构为多级列头
pivot_df.columns = pd.MultiIndex.from_tuples(
    [(asin_parent_map[asin_col], asin_col) for asin_col in pivot_df.columns],
    names=['parent', 'asin']
)

# 按parent分组排序列
pivot_df = pivot_df.sort_index(axis=1)

print(pivot_df)

输出结果

parent                        parent1            parent2
asin                       B01MG0ORBL B0735C9RDZ B0735C9RDZ B07FPVR858
keyword_name    volume
leather wallets 23                NaN        NaN       [19]        NaN
mens wallet     456677        [2,126]       [18]      [128]   [21, 136]
wallets for men 566               NaN        NaN       [16]       [10]

说明:如果业务中存在同一个ASIN归属多个parent的情况,上述逻辑会自动将该ASIN列同步放到对应parent分组下,不会丢失数据;如果确定ASIN和parent是一对一关系,可以在生成映射时增加去重校验,避免重复列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 16:12:28