Использование списка или словаря строк для создания нового столбца на основе существующего столбца во фрейме данных - PullRequest
0 голосов
/ 08 января 2019

В настоящее время у меня есть набор значений в столбце в моем фрейме данных. Для значений нет определенного шаблона, и в большинстве случаев он является случайным, но я бы хотел создать свой собственный словарь или список, чтобы, если строка содержала эти значения, я мог создать новый столбец, соответствующий этим ключевым словам. Я пришел из R-фона, поэтому раньше я создал цикл for, распаковывающий список с помощью grepl.

Допустим, у меня есть словарь:

my_dict:

my_dict = {"BC": "Vancouver", "AB": "Calgary", "SK": ["Regina","Saskatoon"], "MB": ["Winnipeg","Brandon"], "ON":["Toronto","Ottawa"]}

По сути, я хочу, чтобы, если строка когда-либо совпадала, тогда использовали Ключ словаря. Также, если их совпадение не найдено или Ключ не указан в словаре, тогда будет введено «Другое». Это то, что я хотел бы увидеть.

ДФ:

df = pd.DataFrame({"Name": ["Jordan","Paul","Adrian","Sarah","Becky","Shawn"], "City":["Vancouver - Lower Mainland","Calgary/Lethbridge","Regina / Moose Jaw","Brandon","Ottawa_Hamilton","Montreal"],
                "Province_Fixed": ["BC","AB","SK","MB","ON","Other"]})

Выходной информацией будет столбец «Provinc_Fixed». Я хотел бы знать, какой метод будет лучшим способом решения этой проблемы. Я просто дал словарь ради вопроса, делать это не нужно. Спасибо! Я очень ценю это.

1 Ответ

0 голосов
/ 08 января 2019

Lopp по значениям словаря и создание нового столбца со всеми строками с соответствием по str.contains, также для list s необходимо объединить значения в одну строку с помощью | для регулярного выражения OR:

for k, v in my_dict.items():
    pat = '|'.join(v) if isinstance(v, list) else v
    df.loc[df['City'].str.contains(pat) , 'new'] = k

df['new'] = df['new'].fillna('Other')
print (df)
     Name                        City Province_Fixed    new
0  Jordan  Vancouver - Lower Mainland             BC     BC
1    Paul          Calgary/Lethbridge             AB     AB
2  Adrian          Regina / Moose Jaw             SK     SK
3   Sarah                     Brandon             MB     MB
4   Becky             Ottawa_Hamilton             ON     ON
5   Shawn                    Montreal          Other  Other
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...