如何只为IsB列在表中不为空的记录设置IsA?

2024-05-18 14:21:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个熊猫数据框。如何仅为data中具有IsB(而不是null)的记录设置列IsA?^当IsBnull时,{}应该是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   |

Tags: 数据idfalsetruedata记录nullisc
1条回答
网友
1楼 · 发布于 2024-05-18 14:21:41

我认为需要^{}^{}来检查NaN,缺少^{}的值来设置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

相关问题 更多 >

    热门问题