У меня есть фрейм данных (df)
df = pd.DataFrame({'No': [123,234,345,456,567,678], 'text': ['60 ABC','1nHG','KL HG','21ABC','K 200','1g HG'], 'reference':['ABC','HG','FL','','200',''], 'result':['','','','','','']}, columns=['No', 'text', 'reference', 'result'])
No text reference result
0 123 60 ABC ABC
1 234 1nHG HG
2 345 KL HG FL
3 456 21ABC
4 567 K 200 200
5 678 1g HG
и список с элементами
list
['ABC','HG','FL','200','CP1']
Теперь у меня есть следующая кодировка:
for idx, row in df.iterrows():
for item in list:
if row['text'].strip().endswith(item):
if pd.isnull(row['reference']):
df.at[idx, 'result'] = item
elif pd.notnull(row['reference']) and row['reference'] != item:
df.at[idx, 'result'] = 'wrong item'
if pd.isnull(row['result']):
break
Я запускаю df и список и проверяю совпадения.
Вывод:
No text reference result
0 123 60 ABC ABC
1 234 1nHG HG
2 345 KL HG FL wrong item
3 456 21ABC ABC
4 567 K 200 200
5 678 1g HG HG
Инструкция разрыва важна, потому что в противном случае в списке может быть найден второй элемент, а затем этот второй элементперезаписал бы содержимое в результате.
Теперь мне нужно другое решение, потому что кадр данных огромен и циклы неэффективны.Думаю, применение apply может работать, но как?
Спасибо!