Фрейм данных: совпадение частичного текста содержимого строки в списке, создание нового столбца - PullRequest
0 голосов
/ 26 мая 2020

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

import pandas as pd
d2 = {'condn':pd.Series(['4.10 < petal_length <= 5.10','sepal_length > 6.30','1.30 < petal_width <= 1.80','3.00 < sepal_width <= 3.30']),
    'score':pd.Series([2,2,5,3])}
d2 = pd.DataFrame(d2)
ref_list = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width']
d2  

Ожидаемый результат (новый столбец: var_name)

Data frame view

Вот код, который у меня есть пробовал, но безуспешно.

for i in range(0,d2.shape[0]):    
    txt =  temp_data.iloc[i,0]
    if txt.isin(ref_list) :
       d2.ix[i,2] = txt  

1 Ответ

1 голос
/ 26 мая 2020

объединить список в строку с разделителем OR и запустить анализ списка с помощью re , чтобы получить сопоставленные группы

import re
d2['var_name'] = [re.search(fr"{'|'.join(ref_list)}", ent).group()
                 for ent in d2.condn]



        condn                     score var_name
0   4.10 < petal_length <= 5.10     2   petal_length
1   sepal_length > 6.30             2   sepal_length
2   1.30 < petal_width <= 1.80      5   petal_width
3   3.00 < sepal_width <= 3.30      3   sepal_width

Вы также можете добиться этого с помощью кода ниже:

d2['var_name'] =  d2.condn.str.extract(fr"({'|'.join(ref_list)})")

F-строки : они обеспечивают более простой (IMO) способ встраивания значения в строках. python имеет несколько способов комбинировать строки с переменными, включая метод format . F-струны просто облегчают задачу.

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