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

如何使用Pandas行内数组元素生成新列并拆分原行?

如何将DataFrame中每行的对应数组元素配对并展开行?

我来帮你搞定这个需求!你需要把每行里a和b数组的对应元素两两配对成新数组c,同时把原行展开成每个配对对应一行。下面是具体的实现步骤和代码:

第一步:构造原始数据

先重现你给出的DataFrame(修正了原始代码里a列第二个元素的小笔误,和你展示的结果保持一致):

import pandas as pd
import numpy as np

pa = pd.DataFrame({
    'a': np.array([[1.,4.],[2.,3.3],[3.,4.,5.]]),
    'b': np.array([[2.,5.],[3., 6.],[4.,5.,6.]])
})

第二步:生成配对数组并展开行

我们可以用apply逐行处理生成c列,再用explode展开行:

# 逐行将a和b的对应元素配对成列表,存入c列
pa['c'] = pa.apply(lambda row: [list(pair) for pair in zip(row['a'], row['b'])], axis=1)

# 把c列的每个配对元素拆分成单独一行,重置索引
result = pa.explode('c', ignore_index=True)

查看最终结果

运行后打印result就能得到你想要的格式:

a                   b           c
0          [1.0, 4.0]        [2.0, 5.0]  [1.0, 2.0]
1          [1.0, 4.0]        [2.0, 5.0]  [4.0, 5.0]
2          [2.0, 3.3]        [3.0, 6.0]  [2.0, 3.0]
3          [2.0, 3.3]        [3.0, 6.0]  [3.3, 6.0]
4  [3.0, 4.0, 5.0]  [4.0, 5.0, 6.0]  [3.0, 4.0]
5  [3.0, 4.0, 5.0]  [4.0, 5.0, 6.0]  [4.0, 5.0]
6  [3.0, 4.0, 5.0]  [4.0, 5.0, 6.0]  [5.0, 6.0]

简单解释

  • apply(..., axis=1) 让我们可以逐行处理数据,用zip(row['a'], row['b'])把每行a和b的对应元素一一配对,再转成列表形式,这样每行的c就变成了包含所有配对的列表。
  • explode('c') 是Pandas专门用来展开列表型列的方法,它会把c列里的每个元素单独拆成一行,同时保留a和b列的原始数组内容,ignore_index=True是为了让新结果的索引从0开始连续排列,更整洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:14:24