python - 如何只为pandas中IsB列不为空的记录设置IsA?

标签 python pandas dataframe

我有一个 pandas DataFrame。如何仅为 data 中具有 IsB(而非 null)的记录设置列 IsA?对于 IsBnull 的记录,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   |

最佳答案

我认为需要isnanotna用于检查 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/

相关文章:

python - 网格搜索的所有参数的组合

python - 在python中导入36列进行绘图,第一列是日期

python - 是否可以在 pandas 中逐行进行 bool 运算?

python - 如何在每个数据框列旁边插入新列

返回不是 NA 的最后一个数据框列

python : How to create columns from words occurred in a column?

R:分配数据框列的变量标签

python: urllib2 如何使用 urlopen 请求发送 cookie

python - 为什么在循环中使用 sleep 时在 Python 中打印不会暂停?

python - 在 Python 中订购 Logit?