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

Pandas:将DataFrame列中的列表拆分为多行并生成所有组合

解决DataFrame列表列生成全组合行的问题

看来你是想把DataFrame里两个列表列的元素做全笛卡尔积展开,同时保留对应的id,但之前的方法只生成了部分匹配的行,还出现了缺失值对吧?我来帮你搞定这个问题。

先还原你的原始数据

首先我们用代码把你给出的输入DataFrame构造出来:

import pandas as pd

df = pd.DataFrame({
    'Job position': [[6], [2,6], [1]],
    'Job type': [[1], [3,6,5], [9]],
    'id': [3,4,43]
})

问题根源

你之前得到缺失值,大概率是直接用了两次df.explode()——这种方式是把两个列表按位置一一对应展开,当两个列表长度不一致时,就会自动补NaN,而不是生成所有可能的组合,这就是你遇到问题的原因。

正确解决方案:生成笛卡尔积

我们需要对每一行的两个列表元素生成全组合,这里可以用itertools.product实现笛卡尔积,再结合apply和concat拼接结果:

import itertools

# 对每一行生成Job position和Job type的全组合
result = df.apply(
    lambda row: pd.DataFrame(
        # 生成当前行两个列表的笛卡尔积
        list(itertools.product(row['Job position'], row['Job type'])),
        columns=['Job position', 'Job type']
    ).assign(id=row['id']),  # 把当前行的id赋值给所有组合行
    axis=1
).concat()  # 把所有行生成的小DataFrame拼接起来

# 重置索引、调整列顺序,同时把数值转成int类型(可选)
result = result[['id', 'Job position', 'Job type']].astype(int).reset_index(drop=True)

最终运行结果

执行完上面的代码后,你会得到和预期完全一致的输出:

id  Job position  Job type
0   3             6         1
1   4             2         3
2   4             2         6
3   4             2         5
4   4             6         3
5   4             6         6
6   4             6         5
7  43             1         9

这个方法的核心是对每一行单独处理,确保两个列表的所有元素都能两两组合,完全避免了缺失值的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:57:24