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

如何生成行数等于各列长度乘积的DataFrame?

生成多列笛卡尔积DataFrame的高效方法

你需要的是基于各列取值生成笛卡尔积的DataFrame,pandas提供了多种快速实现方式,完全支持多列场景:

方法1:用pd.MultiIndex.from_product(推荐,简洁高效)

直接通过多索引的笛卡尔积生成DataFrame,代码量少,适合提前定义好所有列数据的场景:

import pandas as pd

# 定义各列的取值(可扩展任意多列)
col_data = {
    "color": [1, 2, 3],
    "weekday": [0, 1]
}

# 生成笛卡尔积DataFrame
df = pd.DataFrame(
    pd.MultiIndex.from_product(col_data.values(), names=col_data.keys()),
    columns=col_data.keys()
)

运行后输出就是你要的结果,新增列只需在col_data字典中添加键值对即可——比如加"size": ["S", "M", "L"],会自动生成3×2×3=18行的DataFrame。

方法2:用pd.merge的交叉连接(直观易读)

pandas 1.2.0及以上版本支持how="cross"参数,可直接对多个单列DataFrame做交叉合并:

import pandas as pd

# 每个列单独生成DataFrame
df_color = pd.DataFrame({"color": [1, 2, 3]})
df_weekday = pd.DataFrame({"weekday": [0, 1]})

# 交叉合并生成笛卡尔积
df = df_color.merge(df_weekday, how="cross")

多列场景下,只需依次链式调用merge即可——比如再合并df_size = pd.DataFrame({"size": ["S", "M", "L"]}),只需写df_color.merge(df_weekday, how="cross").merge(df_size, how="cross")。

方法3:用itertools.product(原生Python结合)

借助Python标准库的itertools.product生成笛卡尔积元组,再转为DataFrame,适合需要先处理元组的场景:

import pandas as pd
from itertools import product

# 定义各列取值
color_list = [1, 2, 3]
weekday_list = [0, 1]

# 生成笛卡尔积并转DataFrame
df = pd.DataFrame(product(color_list, weekday_list), columns=["color", "weekday"])

多列时,在product参数中添加更多序列即可,比如product(color_list, weekday_list, size_list)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 17:25:27