Я сравниваю 2 столбца dataframes pandas, пытаясь найти соответствие подстроки, используя вложенные для циклов. Есть ли более эффективный способ сделать это?
Вот мой фактический код:
c = 0
for i, sisRow in sis.iterrows():
for e, sapRow in sap.iterrows():
codSis = sisRow['prod_Codigo']
codSap = sapRow['ItemCode']
if codSap.find(codSis) != -1:
sis.loc[i, 'desc_SAP'] = sapRow['ItemName']
sis.loc[i, 'prod_CodigoSap'] = sapRow['ItemCode']
sap.drop(sap.index[e])
c += 1
print(c, end=', ')
break
Я использую оператор print только для того, чтобы отслеживать, что программа запущена, и я не попал в бесконечный цикл.
Вместо повторения строк вы можете выполнять повторное сопоставление последовательностей и использовать булевскую индексацию по столбцам.
sap_map = sapRow.set_index('ItemCode')['ItemName']
for k, v in sap_map.items():
mask = [codSis in k for codSis in sisRow['prod_Codigo'].values]
sis.loc[mask, 'desc_SAP'] = v
sis.loc[mask, 'prod_CodigoSap'] = k
Непонятно, почему вы sap.drop(...)
элементы из итератора во время sap.drop(...)
, т. sap.drop(...)
. Это не рекомендуется, и не ясно, что это такое. Поэтому я пропустил этот шаг. Это означает, что вы можете заказать свою картографическую серию, иначе последующие сопоставления будут иметь приоритет.