строка поиска в панде - PullRequest
       8

строка поиска в панде

1 голос
/ 22 октября 2019

Здравствуйте, у меня два кадра данных. Один из них - master db1 (у него много строк), второй - sourcetarget (он меньше). Я хочу посмотреть на db1 все слова в sourcetarget , тогда, если он совпадет, я создам новый логический столбец (0,1). Я опробовал этот код (который имеет высокую сложность), но я всегда получаю 0. Что не так?

start_time = time.time()

compt=0
for i in db1.clean_nomComplet:
    for j in sourcetarget.sourcetarget:
        res0 = i.find(j)
        if res0 >= 0:     
            db1['top'] = 1
        else:
            db1['top'] = 0
    compt+=1    
    print(compt/len(db1)*100,end="\r")
    if compt%50000 == 0:
        print("../data_out/sauve"+str(compt)+'.csv')
        db1.to_csv('../data_out/sauve'+str(compt)+'.csv', encoding='utf-8-sig')

print("--- %s seconds ---" % (time.time() - start_time))```

1 Ответ

1 голос
/ 22 октября 2019

Лучший способ, с помощью которого я нашел такое сравнение:

#1. You transform the values you want to check on as a set
# because you don't care about having them ordered. This saves A LOT of complexity
source = set(sourcetarget.sourcetarget.values)

# 2. Use the isin function
db1['top'] = 0
db1.loc[db1['clean_nomComplet'].isin(source), 'top'] = 1

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

for index, row in db1.iterrows():
    [...]
    if res0 >= 0:     
        db1.loc[index,'top'] = 1
    else:
        db1[index, 'top'] = 0
...