首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何做python itertools.combinations

如何做python itertools.combinations
EN

Stack Overflow用户
提问于 2020-09-02 07:07:56
回答 1查看 112关注 0票数 3

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

代码语言:javascript
复制
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:......

从…

代码语言:javascript
复制
ID  Supplier 1  Supplier 2
1    B          A
2    B          NaN
3    A          B
4    B          NaN
5    B          A

欲望(任何一个供应商都可以生产):

代码语言:javascript
复制
Supplier    ID
A           1,3,5
B           1,2,3,4,5
A,B         1,2,3,4,5

新代码:

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-02 08:23:57

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

代码语言:javascript
复制
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)

输出:

代码语言:javascript
复制
  Supplier         ID
0        A      1,3,5
1        B  1,2,3,4,5
2      A,B  1,2,3,4,5
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63700395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档