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

Pandas如何将列表列按相邻元素拆分为两列并展开多行

实现方法

你可以通过「相邻元素配对+行展开+列拆分」的逻辑快速完成转换,以下是两种可直接运行的实现方案:

方案1:通用兼容写法(适配所有pandas版本)

核心逻辑是先对每个列表生成相邻元素配对,再展开行拆分列:

import pandas as pd

# 原始数据构造(替换成你自己的DataFrame即可)
df = pd.DataFrame({
    'Name': ['Foo', 'Bar', 'Baz'],
    'Col1': [['A', 'C', 'B', 'D', 'E'], ['G', 'M', 'O'], ['E', 'B']]
})

# 转换逻辑
result = (
    df
    # 为每个列表生成相邻两两配对的元组列表
    .assign(pair = lambda d: d['Col1'].apply(lambda x: list(zip(x[:-1], x[1:]))))
    # 按配对数展开为多行
    .explode('pair')
    # 拆分配对元组为两个新列
    .assign(
        New_Col1 = lambda d: d['pair'].str[0],
        New_Col2 = lambda d: d['pair'].str[1]
    )
    # 清理冗余列、重置索引
    .drop(columns=['Col1', 'pair'])
    .reset_index(drop=True)
)

运行后输出的result和目标结构完全一致:

Name New_Col1 New_Col2
0  Foo        A        C
1  Foo        C        B
2  Foo        B        D
3  Foo        D        E
4  Bar        G        M
5  Bar        M        O
6  Baz        E        B

方案2:高版本简洁写法(pandas 1.0+ 支持,性能更好)

不需要生成中间配对列,直接通过索引切片+重复行的方式实现:

result = pd.DataFrame({
    # Name列按配对数(列表长度-1)重复对应次数
    'Name': df['Name'].repeat(df['Col1'].str.len() - 1),
    # 取每个列表除最后一个元素外的所有值,展开作为第一列
    'New_Col1': df['Col1'].str[:-1].explode(),
    # 取每个列表除第一个元素外的所有值,展开作为第二列
    'New_Col2': df['Col1'].str[1:].explode()
}).reset_index(drop=True)

逻辑说明

  • 长度为n的列表相邻两两配对共生成n-1组,刚好和x[:-1](前n-1个元素)、x[1:](后n-1个元素)的长度匹配,按位置拼接后不会出现错配、漏配。
  • explode方法会自动把列表/序列中的嵌套元素拆分为单独行,同时保留原行其他列的取值,不需要手动写循环遍历。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 17:42:24