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

如何高效合并Pandas DataFrame与含列表列的DataFrame

高效合并含列表分类列的Pandas DataFrame

当然可行!而且完全不用写繁琐的循环,用Pandas的内置矢量化操作就能轻松搞定,特别适合大规模数据集的场景。我给你一步步拆解怎么做:

先看示例场景

假设我们有两个DataFrame:

  • 一个存储产品基础信息(比如ID、名称、价格)
  • 另一个存储产品的分类,其中categories列的每个值都是一个分类列表

先构造示例数据方便理解:

import pandas as pd

# 产品信息DataFrame
df_products = pd.DataFrame({
    'product_id': [1, 2, 3],
    'product_name': ['Laptop', 'Phone', 'Tablet'],
    'price': [999, 699, 299]
})

# 分类信息DataFrame,分类列为列表格式
df_categories = pd.DataFrame({
    'product_id': [1, 2, 3],
    'categories': [['Electronics', 'Computers'], ['Electronics', 'Mobile', 'Accessories'], ['Electronics', 'Tablets']]
})

高效合并步骤

核心思路是先把分类列的列表拆分成单独行,再和产品信息合并,全程都是Pandas的内置高效操作:

  1. 拆分列表列:用explode()方法把每个分类列表里的元素拆成独立行,这样每个产品-分类组合都变成一条记录
  2. 合并DataFrame:用merge()按产品ID关联两个DataFrame

代码实现如下:

# 第一步:拆分分类列表为多行
df_categories_exploded = df_categories.explode('categories')

# 第二步:合并产品信息和拆分后的分类数据
df_final = pd.merge(df_products, df_categories_exploded, on='product_id', how='left')

运行后得到的df_final就是你要的目标DataFrame,每个产品的每个分类都对应一行,而且完全没有循环,效率拉满!

为什么这方法高效?

explode()和merge()都是Pandas底层用C实现的矢量化操作,比Python层面的循环快几个数量级——哪怕你的数据集有几十万甚至上百万条记录,也能快速处理。

如果你的需求里需要保留原分类列表,或者要处理缺失分类的情况,只需要调整merge()的how参数(比如how='inner'只保留有分类的产品)就行,灵活性很强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:09:56