Сравнение различных кадров данных Pandas с использованием вложенных циклов for

1

Я сравниваю 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 только для того, чтобы отслеживать, что программа запущена, и я не попал в бесконечный цикл.

Теги:
pandas

1 ответ

0
Лучший ответ

Вместо повторения строк вы можете выполнять повторное сопоставление последовательностей и использовать булевскую индексацию по столбцам.

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(...). Это не рекомендуется, и не ясно, что это такое. Поэтому я пропустил этот шаг. Это означает, что вы можете заказать свою картографическую серию, иначе последующие сопоставления будут иметь приоритет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню