首页 > 解决方案 > 在熊猫数据框中为条件赋值?

问题描述

我有一个熊猫数据框,如下所示

df
     time   case1   case2   case3
0     5     house   bank     atm
1     3     bank    house  pharmacy
2     10    bank    bank     atm
3     20    house  pharmacy  house

我想为每个案例添加一个对应于给定类别的平均值和标准偏差的列。

我知道

p_house = [20, 10]
p_bank =  [5, 1]
p_atm  =  [3, 1]
p_pharmacy = [10, 5]

我想要一个像下面这样的熊猫数据框

df
     time   case1   case2   case3          p1      p2       p3
0     5     house   bank     atm        [20, 10] [5, 1]   [3, 1]     
1     3     bank    house  pharmacy      [5, 1] [20, 10]  [10, 5]      
2     10    bank    bank     atm         [5, 1]  [5, 1]   [3, 1]
3     15    house  pharmacy  house      [20, 10][10, 5]   [20, 10] 

标签: pythonpandas

解决方案


IIUC,您可以使用字典然后使用stackmap然后沿着时间索引重新加入。

map_dict = {    'house'  : [20, 10]       
 ,   'bank' :  [5, 1]
 ,   'atm'  :  [3, 1]
 ,   'pharmacy' : [10, 5] }

df1 = df.set_index('time').join(df.set_index("time").stack().map(map_dict).unstack()\
    .rename(
    columns=lambda x: x.replace("case", "p")
    ),how='outer')


      case1     case2     case3        p1        p2        p3
time                                                         
5     house      bank       atm  [20, 10]    [5, 1]    [3, 1]
3      bank     house  pharmacy    [5, 1]  [20, 10]   [10, 5]
10     bank      bank       atm    [5, 1]    [5, 1]    [3, 1]
20    house  pharmacy     house  [20, 10]   [10, 5]  [20, 10]

推荐阅读