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

如何将Pandas单行列名含层级分类的列表值转结构化表格?

最优解决方案:拆分层级列名并展开列表数据

示例输入

先构造符合你描述的示例DataFrame:

import pandas as pd

df = pd.DataFrame({
    "电子产品>手机>智能手机": [["iPhone 14", "小米13", "华为Mate 60"]],
    "电子产品>平板>安卓平板": [["iPad Air", "华为MatePad"]],
    "日用品>纸巾": [["维达", "清风"]]  # 模拟层级不足3级的情况
})

完整实现代码

import pandas as pd

# 1. 将宽表转为长格式,提取分类路径和对应item列表
df_long = df.melt(var_name="category_path", value_name="items")

# 2. 拆分分类路径为层级列,自动补全空值(处理层级不足3级的情况)
df_long[["category 1", "category 2", "category 3"]] = (
    df_long["category_path"]
    .str.split(">", expand=True)
    .fillna("")
)

# 3. 展开item列表,将每个元素转为单独行
df_final = df_long.explode("items").rename(columns={"items": "item"})

# 4. 调整列顺序并清理冗余列
df_final = df_final[["item", "category 1", "category 2", "category 3"]]

# 查看结果
print(df_final)

代码说明

  • melt():把原DataFrame的列名(分类路径)转为数据列,将单行长表转为两列的长格式,是处理这类宽表的基础操作。
  • str.split(">", expand=True):直接将以>分隔的分类路径拆分为多列,expand=True会自动将拆分结果转为DataFrame列,配合fillna("")处理层级不足3级的场景,避免出现NaN。
  • explode():Pandas专门用于展开列表/数组类型单元格的方法,能高效将列表中的每个元素转为独立行,同时保留对应分类信息,性能远优于手动循环。
  • 最后调整列顺序,得到完全符合需求的结构化表格。

输出结果

item category 1 category 2 category 3
0    iPhone 14       电子产品         手机       智能手机
1      小米13       电子产品         手机       智能手机
2  华为Mate 60       电子产品         手机       智能手机
3     iPad Air       电子产品         平板       安卓平板
4  华为MatePad       电子产品         平板       安卓平板
5          维达         日用品         纸巾           
6          清风         日用品         纸巾           

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 04:30:57