熊猫中任意列表的笛卡尔积

Max*_*nis 2 python pandas

给定任意数量的列表,我想生成一个熊猫DataFrame作为笛卡尔积。例如,给定:

a = [1, 2, 3]
b = ['val1', 'val2']
c = [100, 101]
Run Code Online (Sandbox Code Playgroud)

我想DataFrame以列ab、 和c以及所有 3x2x2=12 组合结束。

pandas 中的笛卡尔积不同,我正在寻找提供两个以上输入的能力,并且我不希望传递DataFrames,这将涉及将值保持在相同的范围内DataFrame而不是将其组合。这个问题的答案可能不会与那个问题的答案重叠。

x 和 y 数组点的笛卡尔积点成 2D 点的单个数组不同,我正在寻找DataFrame带有命名列的 Pandas结果,而不是二维 numpy 数组。

Max*_*nis 8

基于对相关问题(两个s 的笛卡尔积)的回答DataFrame,此函数采用列表字典并返回笛卡尔积:

def cartesian_product(d):
    index = pd.MultiIndex.from_product(d.values(), names=d.keys())
    return pd.DataFrame(index=index).reset_index()
Run Code Online (Sandbox Code Playgroud)

例子:

cartesian_product({'a': [1, 2, 3],
                   'b': ['val1', 'val2'],
                   'c': [100, 101]})
    a      b      c
0   1   val1    100
1   1   val1    101
2   1   val2    100
3   1   val2    101
4   2   val1    100
5   2   val1    101
6   2   val2    100
7   2   val2    101
8   3   val1    100
9   3   val1    101
10  3   val2    100
11  3   val2    101
Run Code Online (Sandbox Code Playgroud)

我已将此添加到我的microdf包中