Сравнение различных кадров данных Pandas с использованием вложенных циклов for - PullRequest
0 голосов
/ 11 октября 2018

Я сравниваю два столбца данных панд, пытаясь найти совпадение подстроки, используя вложенные циклы for.Есть ли более эффективный способ сделать это?

Вот мой фактический код:

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

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

1 Ответ

0 голосов
/ 11 октября 2018

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...