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

Pandas如何将元组列表列拆分为p1、p2命名列并转换为长表

实现方案

你可以用pandas内置的explode+元组拆分逻辑快速实现需求,完整可运行代码如下:

import pandas as pd

# 原始DataFrame
df = pd.DataFrame([
{"A": 1, "B": "20", "pairs": [(1,2), (2,3)]},
{"A": 2, "B": "22", "pairs": [(1,1), (2,2), (1,3)]},
{"A": 3, "B": "24", "pairs": [(1,1), (3,3)]},
{"A": 4, "B": "26", "pairs": [(1,3)]},
])

# 核心转换逻辑
df = df.explode('pairs', ignore_index=True)
df[['p1', 'p2']] = pd.DataFrame(df['pairs'].tolist(), index=df.index)
df = df.drop('pairs', axis=1)

运行后输出结果和你期望的完全一致:

>>> df
   A   B  p1  p2
0  1  20   1   2
1  1  20   2   3
2  2  22   1   1
3  2  22   2   2
4  2  22   1   3
5  3  24   1   1
6  3  24   3   3
7  4  26   1   3

逻辑说明

  • explode('pairs', ignore_index=True):将pairs列的列表按元素拆分为多行,每个元组单独占一行,同时重置索引避免重复
  • pd.DataFrame(df['pairs'].tolist(), index=df.index):把每行的元组拆分为两列,通过指定index保证和原表行对齐,直接赋值给p1、p2列
  • 最后删除冗余的pairs列即可

如果你使用的pandas版本低于0.25不支持explode,可以用下面的兼容写法:

df = df.loc[df.index.repeat(df.pairs.str.len())]
df['pairs'] = np.concatenate(df.pairs.values)
# 后面拆分p1、p2的逻辑和上面一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 23:54:01