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

Python中如何将pandas DataFrame列explode后堆叠或生成多层索引?

解决pandas explode genre列后重复数据且保留原始信息的方案

前置说明

该场景是典型的多值分隔列拆分后的结构化处理问题,以下提供两种符合需求的实现方案,都不会丢失原始genre列的内容,也不会产生无效重复数据。


方案1:多层索引存储拆分后分类(适配需要单行单分类的使用场景)

该方案既保留explode后单行对应单个genre分类的结构方便后续统计,又通过多层索引避免重复判定问题,所有原始字段完整保留。
操作代码如下:

import pandas as pd

# 此处模拟和你数据集结构一致的原始数据
df = pd.DataFrame({
    'movie_id': [1, 2, 3],
    'title': ['银河护卫队', '爱乐之城', '蜘蛛侠:英雄归来'],
    'genre': ['Action,Adventure,Sci-Fi', 'Comedy,Drama,Romance', 'Action,Adventure,Sci-Fi'],
    'rating': [8.1, 8.3, 7.4]
})

# 1. 备份原始genre列,确保原始信息不丢失
df['original_genre'] = df['genre']

# 2. 拆分genre为列表后执行explode
df['genre'] = df['genre'].str.split(',')
exploded_df = df.explode('genre', ignore_index=False)

# 3. 设置多层索引:第一层为原始记录的唯一标识(如movie_id或原行索引),第二层为拆分后的genre值
exploded_df = exploded_df.set_index(['movie_id', 'genre'])

方案优势:

  • 所有原始字段100%保留,无信息损失
  • 多层索引天然区分同一原始记录的不同分类,不会被判定为重复行
  • 后续按genre筛选、聚合统计可直接通过索引操作,执行效率更高

方案2:单记录聚合存储(适配需要每行对应唯一原始记录的无重复场景)

如果不需要单行单分类的结构,直接在原始行内存储拆分后的genre信息即可,整个DataFrame完全无重复行。
操作代码如下:

# 方式A:将genre拆分为列表存在新列,保留原始genre列
df['split_genre'] = df['genre'].str.split(',')

# 方式B:将genre拆分为多列存储,每列对应一个分类
genre_expand_cols = df['genre'].str.split(',', expand=True).add_prefix('genre_')
df = pd.concat([df, genre_expand_cols], axis=1)

方案优势:

  • 每行对应唯一原始记录,完全无重复数据
  • 同时保留原始字符串、拆分列表、分列存储三种genre格式,适配不同的使用需求

已有explode重复数据的修复方法

如果你已经执行完explode产生了重复数据,可按维度去重:

  • 完全相同的整行重复:直接执行exploded_df = exploded_df.drop_duplicates()
  • 仅需去重「同一原始记录+同一genre」的重复行:执行exploded_df = exploded_df.drop_duplicates(subset=['movie_id', 'genre'], keep='first')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:27:03