Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用python itertools.compositions_Python_Python 3.x - Fatal编程技术网

如何使用python itertools.compositions

如何使用python itertools.compositions,python,python-3.x,Python,Python 3.x,我试图从所有供应商组合中找出可能的产品列表。 找出组合中的任何一个都可以生产出产品 import itertools import pandas as pd import numpy as np Column = {'ID':['1','2','3','4','5'],'Supplier 1':['B','B','A','B','B'],'Supplier 2':['A','NaN','B','NaN','A']} df=pd.DataFrame(Column) df # Define al

我试图从所有供应商组合中找出可能的产品列表。 找出组合中的任何一个都可以生产出产品

import itertools
import pandas as pd
import numpy as np

Column = {'ID':['1','2','3','4','5'],'Supplier 1':['B','B','A','B','B'],'Supplier 2':['A','NaN','B','NaN','A']}
df=pd.DataFrame(Column)
df

# Define all Supplier Columns
cols = [c for c in df.columns if "Supplier" in c]
# get unique suppliers
suppl = np.unique(np.concatenate([df[c].dropna() for c in cols]))
result = []
for sn in range(len(suppl)):
# generate combinations of suppliers
for combi in itertools.combinations(suppl, sn+1):
result.append({combi:......

Desire(任一供应商均可生产):

新代码:

from itertools import combinations, chain
import pandas as pd
import numpy as np

df = {'ID':['1','2','3','4','5'],'Supplier 1':['B','B','A','B','B'],'Supplier 2':['A',np.nan,'B',np.nan,'A']}
df=pd.DataFrame(Column)
from itertools import combinations, chain

g1 = df.groupby(['Supplier 1'])['ID'].apply(list)
g2 = df.groupby(['Supplier 2'])['ID'].apply(list)

res = (g1 + g2).to_dict()
res = [[','.join(comb), ','.join(sorted(set(chain.from_iterable([res[k] for k in comb]))))]
       for x in range(1, len(res) + 1) for comb in combinations(res.keys(), x)]

df2 = pd.DataFrame(res, columns=['Supplier', 'ID'])
print(df2)

这不是一个有效的解决方案,但会奏效

from itertools import combinations, chain

g1 = df.groupby(['Supplier 1'])['ID'].apply(list)
g2 = df.groupby(['Supplier 2'])['ID'].apply(list)

res = (g1 + g2).to_dict()
res = [[','.join(comb), ','.join(sorted(set(chain.from_iterable([res[k] for k in comb]))))]
       for x in range(1, len(res) + 1) for comb in combinations(res.keys(), x)]

df2 = pd.DataFrame(res, columns=['Supplier', 'ID'])
print(df2)
输出:

  Supplier         ID
0        A      1,3,5
1        B  1,2,3,4,5
2      A,B  1,2,3,4,5

Supplier 2
在您的字典中有
C
,但您的示例没有显示
C
@deadshot,我错了。桌子上只有A和B。感谢感谢@deadshot,但它弹出了一个错误。这种事发生在你身上吗
-->12用于范围(1,len(res)+1)内的x,用于组合中的梳(res.keys(),x)]类型错误:“float”对象不可编辑
不,我没有收到任何错误。将“NaN”替换为仍显示错误的np.nanIt。我已经把完整的代码贴在上面了。你能帮我看一下吗。非常感谢。删除np周围的引号。但同样的错误。我只是完全复制了你的代码,没有修改。不知道发生了什么
from itertools import combinations, chain

g1 = df.groupby(['Supplier 1'])['ID'].apply(list)
g2 = df.groupby(['Supplier 2'])['ID'].apply(list)

res = (g1 + g2).to_dict()
res = [[','.join(comb), ','.join(sorted(set(chain.from_iterable([res[k] for k in comb]))))]
       for x in range(1, len(res) + 1) for comb in combinations(res.keys(), x)]

df2 = pd.DataFrame(res, columns=['Supplier', 'ID'])
print(df2)
  Supplier         ID
0        A      1,3,5
1        B  1,2,3,4,5
2      A,B  1,2,3,4,5