我有一个 pandas DataFrame。如何仅为 data
中具有 IsB
(而非 null
)的记录设置列 IsA
?对于 IsB
为 null
的记录,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 |
最佳答案
我认为需要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
关于python - 如何只为pandas中IsB列不为空的记录设置IsA?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50579484/