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
相关产品推荐
相关产品推荐

