给定任意数量的列表,我想生成一个熊猫DataFrame作为笛卡尔积。例如,给定:
a = [1, 2, 3]
b = ['val1', 'val2']
c = [100, 101]
Run Code Online (Sandbox Code Playgroud)
我想DataFrame以列a、b、 和c以及所有 3x2x2=12 组合结束。
与pandas 中的笛卡尔积不同,我正在寻找提供两个以上输入的能力,并且我不希望传递DataFrames,这将涉及将值保持在相同的范围内DataFrame而不是将其组合。这个问题的答案可能不会与那个问题的答案重叠。
与x 和 y 数组点的笛卡尔积点成 2D 点的单个数组不同,我正在寻找DataFrame带有命名列的 Pandas结果,而不是二维 numpy 数组。
基于对相关问题(两个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包中。
| 归档时间: |
|
| 查看次数: |
1539 次 |
| 最近记录: |