【问题标题】:Pandas: How do I assign multiple values based on different combinations of column content?Pandas:如何根据列内容的不同组合分配多个值?
【发布时间】:2015-06-04 20:56:16
【问题描述】:

我想根据以下条件创建一个具有数值的新列:

一个。如果颜色=蓝色 & 宠物=狗,点数=10

b.如果颜色=蓝色 & 宠物=猫,点数=8

c。如果宠物=蛇&性别=女性,则积分=7

d。如果宠物=鼠标和性别=男性,则积分 = 6

所有行都必须满足其中一个条件。这些行永远不会满足 2 个或不满足任何条件。

    color     pet       gender
0   blue      dog       male
1   blue      cat       male
2   orange    snake     female
3   green     mouse     male

我希望最终结果如下:

    color     pet       gender     points
0   blue      dog       male       10
1   blue      cat       male       8
2   orange    snake     female     7
3   green     mouse     male       6

我该如何做到这一点?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    与其做一个很长的单行,我认为使用loc 屏蔽的 4 个单独的作业会更具可读性:

    In [4]:
    df.loc[(df['color']=='blue') & (df['pet']=='dog'), 'points'] = 10
    df.loc[(df['color']=='blue') & (df['pet']=='cat'), 'points'] = 8
    df.loc[(df['pet']=='snake') & (df['gender']=='female'), 'points'] = 7    
    df.loc[(df['pet']=='mouse') & (df['gender']=='male'), 'points'] = 6
    df
    
    Out[4]:
    
        color    pet  gender  points
    0    blue    dog    male      10
    1    blue    cat    male       8
    2  orange  snake  female       7
    3   green  mouse    male       6
    

    可以将上面的内容重写为多嵌套的np.where 语句,但我发现一旦超过 3 个条件,它就会变得难以阅读,并且与单独的 loc 相比,没有太多的性能提升陈述

    【讨论】:

      猜你喜欢
      • 2021-04-30
      • 2021-08-13
      • 2021-08-07
      • 2011-01-04
      • 2018-07-22
      • 1970-01-01
      • 2020-09-27
      • 1970-01-01
      相关资源
      最近更新 更多