Использование смягченного словаря для сопоставления значений в столбце - PullRequest
0 голосов
/ 11 октября 2018

Мне было интересно, может ли кто-нибудь помочь мне сопоставить столбец строк с неким расслабленным словарем в python.Итак, у меня есть следующий фрейм данных Python:

String                      Colour
8392apple8309
8dbsfhorange9anld
38banananflks9

и этот словарь:

_dict
{'apple':'Red',
'orange':'Orange'
'banana':'Yellow'}

Я написал эту функцию:

def fruitsearch(string):
    return [value for key, value in _dict.items() if string in key.lower()]

, которая можетвозьмите подстроки моих ключей, такие как fruitsearch ('app') и верните правильный цвет, красный.Однако я хотел бы, чтобы функция нашла ключи в столбце моего фрейма данных «String» и вернула правильный цвет во второй столбец в фрейме данных color, поэтому он будет выглядеть следующим образом:

String                        Colour
8392apple8309                 Red
8dbsfhorange9anld             Orange
38banananflks9                Yellow

Спасибо!

Ответы [ 2 ]

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

В настоящее время вы выполняете итерацию по своему словарю в расчете по строкам .Для эффективности, особенно с большим количеством строк, рассмотрим по столбцам операции для каждого элемента словаря.В этом случае вы можете использовать pd.Series.str.contains и предоставить аргумент regex=False для повышения производительности.

for k, v in _dict.items():
    df.loc[df['String'].str.contains(k, regex=False), 'Colour'] = v

print(df)

              String  Colour
0      8392apple8309     Red
1  8dbsfhorange9anld  Orange
2     38banananflks9  Yellow
0 голосов
/ 11 октября 2018

Это один подход.

Демонстрация:

import pandas as pd


def fruitsearch(string):
    _dict = {'apple':'Red', 'orange':'Orange', 'banana':'Yellow'}
    for key, value in _dict.items():
        if key.lower() in string:
            return value 
    return None


df = pd.DataFrame({"String": ["8392apple8309", "8dbsfhorange9anld", "38banananflks9"]})
df["Colour"] = df["String"].apply(fruitsearch)

print(df)

Вывод:

              String  Colour
0      8392apple8309     Red
1  8dbsfhorange9anld  Orange
2     38banananflks9  Yellow
...