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

Pandas如何对指定多列实现非列表类型的unnest/explode操作

Pandas 实现指定列的行展开(非列表列explode)

你需要的这个操作本质是固定非展开列,把指定的多列转换成「属性-值」的键值对行,属于典型的宽表转长表场景,用pandas内置的melt方法就能实现,不需要手写循环。

  • 第一步:导入依赖、构造示例输入数据
import pandas as pd

df = pd.DataFrame({
    'id': ['id1', 'id2'],
    'another_id': ['uuid1', 'uuid2'],
    'origin': ['o1', 'o2'],
    'title': ['t1', 't2']
})
  • 第二步:指定要展开的列,执行转换
explode_columns = ['origin', 'title']
result = df.melt(
    # 保留不需要展开的列作为固定标识列
    id_vars=df.columns.difference(explode_columns, sort=False).tolist(),
    value_vars=explode_columns,
    # 指定展开后存储原列名、原值的列名
    var_name='attribute',
    value_name='value'
)
  • 第三步:(可选)对齐示例输出的行顺序
    默认melt输出会把同一个属性的所有值排在一起,如果要实现同一个id下origin在前、title在后的顺序,追加排序逻辑即可:
result = result.sort_values(
    by=['id', 'attribute'], 
    ascending=[True, False]
).reset_index(drop=True)

执行后输出的结果和预期完全一致:

id another_id attribute value
0  id1      uuid1    origin    o1
1  id1      uuid1     title    t1
2  id2      uuid2    origin    o2
3  id2      uuid2     title    t2

注意:不要用列表列的常规explode方法实现这个需求,那个方法是把单元格里的列表/可迭代对象拆成多行,和当前场景不匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 07:21:21