【问题标题】:Creating a new variable with lots of conditions, combining blank and categorical values创建具有大量条件的新变量,结合空白值和分类值
【发布时间】:2018-08-22 02:49:17
【问题描述】:

我有一个通常看起来像这样的数据框

ID Loc SL_Local SL_State TP Overall
12 54X          E        I  D
45 86I D        I        H  E
98 65R H        H        H  H

我想创建一个新列 (SL),它使用带有一些 if/then 逻辑的 SL_Local 和 SL_State 列。基本上,如果 SL_Local 为空白,则 SL = SL_State,否则如果 SL_Local = D 且 SL_State = I,则 SL = D,依此类推。总共有大约 20 种可能的组合。

我找到了一些使用 if/else 逻辑来创建标志的示例(例如 here),但这并不是我想要的。我还发现了一些有关具有多个条件的问题(例如this one),但返回ValueError: operands could not be broadcast together with shapes (1131952,) (2,) 并且似乎不适用于空白值。我在一个包含 NaN 的列上尝试了这种逻辑,考虑到空白可能难以处理,但这也行不通。

【问题讨论】:

    标签: python python-3.x pandas


    【解决方案1】:

    使用 np.select

    import pandas as pd
    import numpy as np
    df = pd.DataFrame({'ID':[12,45,98],'Loc':['54X','86I','65R'],'SL_Local':['','D','H'],'SL_State':['E','I','H'],'TP':['I','H','H'],'Overall':['D','E','H']})
    df = df[['ID','Loc','SL_Local','SL_State','TP','Overall']]
    df
    

    输出:

        ID  Loc  SL_Local   SL_State    TP  Overall
    0   12  54X                E        I      D
    1   45  86I    D           I        H      E
    2   98  65R    H           H        H      H
    

    然后做

    condition_list = [
              (df['SL_Local'] =='') & (df['SL_State'] is not None),
              (df['SL_Local'] == 'D') & (df['SL_State'] == 'I')
               ]
    choice_list = [df['SL_State'], 'D']
    
    df['SL'] = np.select(condition_list, choice_list, default = '')
    df
    

    输出:

       ID  Loc    SL_Local    SL_State    TP    Overall    SL
    0  12  54X                   E         I       D        E
    1  45  86I        D          I         H       E        D
    2  98  65R        H          H         H       H   
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-14
      • 1970-01-01
      • 2022-01-08
      • 2021-09-28
      • 1970-01-01
      • 1970-01-01
      • 2020-04-18
      • 1970-01-01
      相关资源
      最近更新 更多