Как установить IsA только для записей, где столбец IsB не равен NULL в пандах? - PullRequest
0 голосов
/ 29 мая 2018

У меня есть пандас DataFrame.Как установить столбец IsA только для записей в data, которые имеют IsB (не null)?IsA должно быть null для записей, где 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 Ответ

0 голосов
/ 29 мая 2018

Я думаю, нужно isna и notna для проверки NaN с, пропущенные значения с numpy.where для набора NaN:

Спасибо @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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...