在Python中获得两个列表的最佳方法是什么-

时间:2018-07-17 16:14:22

标签: python pandas dataframe cartesian-product

这就是我想要做的。

我有两个Pandas DataFrames

商品清单和购买数量

0*

每个ITEM可用的位置。一项可以在多个位置使用。

ITEM, QTY    
A,1
B,2
C,3

我需要找出可以购买ITEMS的所有可能组合

组合1

ITEM, LOCATION
A, LOC1
B, LOC2
B, LOC3
C, LOC4
C, LOC5

组合2

A, LOC1
B, LOC2
C, LOC4

组合3

A, LOC1
B, LOC2
C, LOC5

组合4

A, LOC1
B, LOC3
C, LOC4

1 个答案:

答案 0 :(得分:1)

您可以使用itertools.product。对于可变数量的变量,可以使用字典。

from itertools import product

d = df2.groupby('ITEM')['LOCATION'].apply(list).to_dict()

dfs = {i: pd.DataFrame({'LOCATION': j}).assign(ITEM=d.keys())
          for i, j in enumerate(product(*d.values()), 1)}

print(dfs)

{1:   LOCATION ITEM
    0     LOC1    A
    1     LOC2    B
    2     LOC4    C,
 2:   LOCATION ITEM
    0     LOC1    A
    1     LOC2    B
    2     LOC5    C,
 3:   LOCATION ITEM
    0     LOC1    A
    1     LOC3    B
    2     LOC4    C,
 4:   LOCATION ITEM
    0     LOC1    A
    1     LOC3    B
    2     LOC5    C}