如何将列值替换为基于另一个列值的字典中的值

问题描述 投票:0回答:1

我有以下数据框:

ID    Unique_value    
red_1        0  
red_2        1
blue_1       1                
blue_2       2           
blue_3       2             
blue_4       3         
blue_4       1          

有两个字典用于映射红色和蓝色 ID:

red_dict = {0: "A", 1: "B", 2: "C"}
blue_dict = {0: "D", 1: "B", 2: "E", 3: "F"}

期望的输出是:

ID    Unique_value    
red_1        A  
red_2        B
blue_1       B                
blue_2       E           
blue_3       E             
blue_4       F         
blue_4       B          

到目前为止我所做的:

  1. 创建了两本词典。
  2. 在for循环中,循环遍历ID列中的每个值,如果ID值与红色相关,则将unique_value列替换为另一个值。
  3. 我陷入了如何从值字典中替换该值的困境。
python pandas dataframe numpy data-analysis
1个回答
0
投票

使用字典中的字典和

groupby.apply
:

mapper = {'red': {0: "A", 1: "B", 2: "C"},
          'blue': {0: "D", 1: "B", 2: "E", 3: "F"}}

df['Unique_value'] = (df.groupby(df['ID'].str.extract('([^_]+)', expand=False),
                                 group_keys=False)['Unique_value']
                        .apply(lambda g: g.map(mapper.get(g.name, {})))
                     )

输出:

       ID Unique_value
0   red_1            A
1   red_2            B
2  blue_1            B
3  blue_2            E
4  blue_3            E
5  blue_4            F
6  blue_4            B
© www.soinside.com 2019 - 2024. All rights reserved.