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

如何用pandas合并多个DataFrame构建多级列索引3D结构数据表

可行实现方案

核心基于pandas的MultiIndex多级列特性实现三维结构存储,拼接时自动对齐行索引,天然支持后续扩展档位、新增品类,具体步骤如下:


步骤1:建立子表与顶层品类的映射

先把现有的4个独立DataFrame和对应的顶层分类名做绑定,分类名可以根据实际业务调整:

import pandas as pd

# 键为顶层品类名,值为对应存储该品类数据的DataFrame,可按需修改映射关系
category_df_mapping = {
    "Gaming": dfG,
    "Casual": dfC,
    "Business": dfB,
    "Office": dfO
}

步骤2:转换多级列头并横向拼接

给每个子表的列加上一级品类标识,再沿列方向拼接,自动对齐行索引:

processed_df_list = []
for category, sub_df in category_df_mapping.items():
    # 为子表生成(品类名 -> 原字段名)的二级列索引
    sub_df.columns = pd.MultiIndex.from_product(
        [[category], sub_df.columns],
        names=["product_category", "field"]
    )
    processed_df_list.append(sub_df)

# 横向拼接得到最终结构
final_df = pd.concat(processed_df_list, axis=1)

步骤3:扩展行档位/新增数据的方法

拼接完成后,可以直接按索引赋值扩展light、high_end等新档位,不需要重构表结构:

# 示例:新增light档位下Gaming品类的品牌和价格
final_df.loc["light", ("Gaming", "brand")] = "Lenovo"
final_df.loc["light", ("Gaming", "price")] = {"gte": 1499, "lte": 2199}

# 示例:新增Casual品类light档位数据
final_df.loc["light", ("Casual", "brand")] = "Acer"
final_df.loc["light", ("Casual", "price")] = {"gte": 399, "lte": 799}

效果说明

执行完上述代码后,打印final_df即可得到预期结构:

  • 顶层列是Gaming、Casual等自定义品类
  • 二级列固定为brand、price两个字段
  • 行索引自动对齐cheap、light等档位,未赋值的位置默认填充NaN,后续补值即可
  • 原price字段存储的区间字典不会被pandas修改,存取逻辑和普通字段完全一致

扩展提示

  • 新增品类时,只要新建列名为['brand', 'price']的子DataFrame,加入映射字典重新执行拼接即可
  • 需要对行档位排序时,直接调用final_df = final_df.sort_index()即可
  • 需要筛选单个品类的数据时,直接用final_df['Gaming']即可取出该品类下所有档位的品牌、价格数据,结构和原来的单表完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 10:06:29