Python 如何仅为列IsB在表中不为空的记录设置IsA?
我有一个熊猫数据框。如何仅为Python 如何仅为列IsB在表中不为空的记录设置IsA?,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个熊猫数据框。如何仅为数据中具有IsB(非null)的记录设置列IsAIsA应为null data['IsA'] = (data['IsB'] == True) & (data['IsC'] == False) & (data['IsD'] == False) & (data['IsE'] == False) | ID | IsA | IsB | IsC | IsD | IsE | |----|--------|--------|-----|-----
数据中具有IsB
(非null
)的记录设置列IsA
<对于IsB
为null
的记录,code>IsA
应为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 |
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 | | | 0 | 0 | 0 |
我认为需要检查NaN
s,缺少设置为NaN
的值:
感谢@coldspeed的创意:
data['IsA'] = data[['IsC', 'IsD', 'IsE']].notnull().all(1) & data['IsB'].isnull()
编辑:
为什么不这样缩短表达<代码>数据['IsC'、'IsD'、'IsE']].notnull().all(1)和数据['IsB'].isnull()@coldspeed-当
IsB
为nan
时,您的答案仍将IsA
设置为False
:S@dunkubok我只是按照问题和答案中的蓝图来做的。好吧,让我试着更清楚地解释一下<当IsB
为True
和IsC
时,IsD
,isE
为False
时,code>IsA应变为True
。在某些情况下,IsB
是nan
。对于这种情况,我想将IsA设置为nan。@dunkubok-所以需要data['new']=data['IsC',IsD',IsE']].eq(False)。全部(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