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

如何生成指定Pandas DataFrame所有列值的所有可能组合?

生成Pandas DataFrame所有列值的笛卡尔积组合

嘿,我来帮你搞定这个生成所有列值可能组合的需求!首先先看一下你的原始DataFrame:

import pandas as pd

df = pd.DataFrame({
    'Student':['Siri','Alexa'], 
    'Class':['6', '7'], 
    'Section':['A','B'], 
    'Teacher':['Ravi','Mark'], 
    'School':['C','D']
})

你现在用的添加key然后多次merge的思路是完全可行的,我帮你把代码补全:

# 给原表添加统一的key列,用于笛卡尔积连接
df['key'] = 1

# 依次和每一列做外连接,逐步生成所有组合
df1 = pd.merge(df[['key','Student']], df[['key','Class']], on='key', how='outer')
df2 = df1.merge(df[['key','Section']], on='key', how='outer')
df3 = df2.merge(df[['key','Teacher']], on='key', how='outer')
# 最后合并School列,并删除多余的key列
df_final = df3.merge(df[['key','School']], on='key', how='outer').drop('key', axis=1)

这个方法的核心是:因为所有子表的key值都相同(都是1),外连接会自动把每个子表的所有行和其他子表的所有行进行组合,也就是我们要的笛卡尔积。

不过还有更简洁的方法,用itertools.product直接生成所有组合,代码更短也更直观:

from itertools import product

# 提取每一列的所有值
column_values = [df[col].tolist() for col in df.columns]

# 生成所有列值的笛卡尔积组合
all_combinations = list(product(*column_values))

# 转换为DataFrame
df_final = pd.DataFrame(all_combinations, columns=df.columns)

这个方法里,product(*column_values)会把每一列的取值作为独立的可迭代对象,生成所有可能的排列组合,最后直接转成DataFrame就搞定了。

两种方法最终都会生成32行数据(因为每列有2个值,2^5=32),结果完全一致,你可以根据自己的习惯选择使用~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:04:04