熊猫-用字符串标签替换列表中的int值

时间:2020-02-25 22:22:41

标签: python pandas list dataframe

我有一个数据框,其中的一列包含ID列表。 我创建了一个字典,将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)

此代码运行,但结果“标签”列仅为NaN。任何指导将不胜感激。

1 个答案:

答案 0 :(得分:1)

IIUC,您可以爆炸df,然后映射值,然后沿索引重新应用groupby以获得值。

请注意,您的列表可能是一个字符串,因此我从ast库中添加了原义eval方法。

在这里无法使用地图的原因是,当您需要使用应用逐个或逐个元素地应用列表时,将其应用于列表。

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]