【问题标题】:compute columns based on multiple conditions基于多个条件计算列
【发布时间】:2018-05-04 02:37:14
【问题描述】:

我正在阅读一篇关于基于条件的新计算的博客,其中插入了新的 col 'category'。

data = {'name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy'], 
        'age': [42, 52, 36, 24, 73], 
        'preTestScore': [4, 24, 31, 2, 3],
        'postTestScore': [25, 94, 57, 62, 70]}
df = pd.DataFrame(data, columns = ['name', 'age', 'preTestScore', 'postTestScore'])
df['category'] = np.where(df['age']>=50, 'yes', 'no')

如何将其扩展到更多的条件,例如 如果年龄小于 20 则为孩子; 如果在 21 到 40 之间,那么年轻; 40岁以上就老了

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    对于多个条件,您可以只使用numpy.select 而不是numpy.where

    import numpy as np
    
    cond = [df['age'] < 20, df['age'].between(20, 39), df['age'] >= 40]
    choice = ['kid', 'young', 'old']
    
    df['category'] = np.select(cond, choice)
    #    name  age  preTestScore  postTestScore category
    #0  Jason   42             4             25      old
    #1  Molly   52            24             94      old
    #2   Tina   36            31             57    young
    #3   Jake   24             2             62    young
    #4    Amy   73             3             70      old
    

    【讨论】:

    • df['age].between(20, 39) 可读性更强。否则很棒。请注意,您也可以使用pandas.cut / numpy.digitize(关于 SO 的许多问题)。
    • 哦,我总是忘记这个!感谢您的改进!
    【解决方案2】:

    您可以使用pd.cut(顺便说一句,40 不是老人 :-()

    pd.cut(df.age,bins=[0,20,39,np.inf],labels=['kid','young','old'])
    Out[179]: 
    0      old
    1      old
    2    young
    3    young
    4      old
    Name: age, dtype: category
    Categories (3, object): [kid < young < old]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-12
      • 1970-01-01
      • 2017-12-15
      • 1970-01-01
      • 2017-08-18
      • 2018-09-08
      • 2010-12-23
      • 2021-07-15
      相关资源
      最近更新 更多