Pandas - заменить значения int в списке строковыми метками - PullRequest
1 голос
/ 26 февраля 2020

У меня есть фрейм данных со столбцом, который включает список идентификаторов. Я создал словарь, который связывает IDS со строковым значением. Я хотел бы заменить значения int строкой.

Name       Label_ID  
Project1   [1]
Project2   [3,5]

label_map={1:'blue', 3:'green',5:'large'}

Я хочу получить вывод:

Name       Label_ID  
Project1   [blue]
Project2   [green, large]

Я пытался использовать:

test['Tags']=test['Label_ID'].map(label_map)

Этот код выполняется, но в результате 'Теги колонка просто NaNs. Любое руководство будет оценено.

1 Ответ

1 голос
/ 26 февраля 2020

IIU C, вы можете взорвать свой df и затем отобразить значения, затем повторно применить groupby вдоль индекса, чтобы получить ваши значения.

обратите внимание, что ваш список может быть строкой, поэтому я добавил буквальный метод eval из библиотеки ast.

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

from ast import literal_eval


df["Label_Map"] = (
    df["Label_ID"]
    .apply(literal_eval) # remove if not needed.
    .explode()
    .map(label_map)
    .groupby(level=0)
    .agg(list)
)

print(df)

       Name Label_ID       Label_Map
0  Project1      [1]          [blue]
1  Project2    [3,5]  [green, large]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...