我想从给定的输入excel文件(InputFile_1.xlsx)准备所有可能组合的跨产品列表。第一个输入文件包含列名以及每个列可以具有的所有可能值。但是,作为附加条件,我想过滤掉所有作为其他输入文件(InputFile_2.xlsx)的所有组合
#InputFile_1.xlsx
# Col1 Col2 Col3 Col4 Col5 Col6 Col7
#0 1 1 1 1 1 1 1
#1 2 2 2 2 2 2 2
#2 3 3 3 3 3 3 3
#3 4 4 4 4 4 4 4
#4 5 5 5 5 5 5 99
#5 6 6 6 6 99 6
#6 99 99 99 99 99 99
#InputFile_2.xlsx(Combinations to be skipped)
# Col1 Col2 Col3 Col4 Col5 Col6 Col7
#0 1 2 * * * * *
#1 2 2 * * * * *
#2 1 3 * * * * *
#3 1 * 1 * * * *
#4 * 5 5 * 4 5 *
.....
.....
我能够在此输入数据框上使用itertools.product准备组合,但无法从此主列表中删除组合。在我到目前为止的代码下面分享:
from pandas import DataFrame
from itertools import product
input_codes_df = pd.read_excel(open('combinationsInput.xlsx', 'rb'), sheet_name='Codes')
input_prohibitions_df = pd.read_excel(open('combinationsInput.xlsx', 'rb'), sheet_name='Prohibitions')
arr_attr = list(input_codes_df.columns)
arr_master_list = []
for attr_identifier in arr_attr:
input_codes_df[attr_identifier] = pd.to_numeric(input_codes_df[attr_identifier], errors='coerce')
tmp_list = list(input_codes_df[input_codes_df[attr_identifier].notnull()][attr_identifier])
arr_master_list.append(tmp_list)
comb_df = pd.DataFrame(list(product(*arr_master_list)))
comb_df.to_csv('allCombinationsOutput.csv',index=False)
toBeRemovedIndexArrays = []
for index, row in input_prohibitions_df.iterrows():
for col in arr_columns:
if row[arr_columns[col]] != '*':
#Add to condition array
#toBeRemovedIndexArrays.append()
#input_prohibitions_df[arr_columns[col]] == row[arr_columns[col]]
#Example condition
indexNames = input_codes_df[ (input_prohibitions_df[arr_columns[0]] == 1) & (input_prohibitions_df[arr_columns[1]] == 2) ].index
input_codes_df.drop(indexNames , inplace=True)
#input_codes_df.drop(toBeRemovedIndexArrays , inplace=True) #Collectively delete all the indexes at once
谢谢。