代码之家  ›  专栏  ›  技术社区  ›  konichiwa

如何只为大熊猫中ISB列不为空的记录设置ISA?

  •  1
  • konichiwa  · 技术社区  · 8 年前

    我有一个熊猫数据框。如何设置列 IsA 仅用于中的记录 data 有一个 IsB (不是) null 伊萨 应该是 无效的 用于记录 国际标准学会 无效的 .

    data['IsA'] = (data['IsB'] == True) & (data['IsC'] == False) & (data['IsD'] == False) & (data['IsE'] == False)
    
    | ID | IsA    | IsB    | IsC | IsD | IsE |
    |----|--------|--------|-----|-----|-----|
    | 1  | 0      | 1      | 0   | 1   | 0   |
    | 2  | 1      | 1      | 0   | 0   | 0   |
    | 3  | <null> | <null> | 0   | 0   | 0   |
    
    1 回复  |  直到 8 年前
        1
  •  3
  •   jezrael    8 年前

    我认为需要 isna notna 检查 NaN s,缺少值 numpy.where 对于集合 :

    感谢@coldspeed的想法:

    data['IsA'] = data[['IsC', 'IsD', 'IsE']].notnull().all(1) & data['IsB'].isnull()
    

    编辑:

    print (data)
       ID  IsA  IsB  IsC  IsD  IsE
    0   1  0.0  1.0    0    1    0
    1   2  1.0  NaN    0    0    0
    2   3  NaN  NaN    0    0    0
    3   4  1.0  NaN    1    0    1
    
    
    mask = (data['IsB'] == True) & (data['IsC'] == False) & 
           (data['IsD'] == False) & (data['IsE'] == False)
    #simplify
    #mask = (data['IsB'] == True) & data[['IsC', 'IsD', 'IsE']].eq(False).all(1)
    data['IsA'] = np.where(data['IsB'].isna(),np.nan, mask)
    print (data)
       ID  IsA  IsB  IsC  IsD  IsE
    0   1  0.0  1.0    0    1    0
    1   2  1.0  1.0    0    0    0
    2   3  NaN  NaN    0    0    0
    3   4  NaN  NaN    1    0    1