我有一个pandas DataFrame,它有10列,包含0、1或NaN。这是一个类似于我的示例数据框。
id col_1 col_2 col_3
'jk3' 1 1 NaN
'kp2' 1 1 1
'po0' 0 1 0
'in6' NaN 0 1
'ml5' 1 NaN 0
'lj3' 1 0 NaN
我想添加另一列df['correct']
,如果该行中存在False
,则显示0
,否则显示True
。
我通过将系列加在一起来进行尝试:
df['correct'] = df[df.col_1 + df.col_2 + col_3]
但是NaN
确实是一个问题,并在应该是NaN
的行中显示True
有什么办法可以实现它,以便输出?
id col_1 col_2 col_3 correct
'jk3' 1 1 NaN True
'kp2' 1 1 1 True
'po0' 0 1 0 False
'in6' NaN 0 1 False
'ml5' 1 NaN 0 False
'lj3' 1 0 NaN False
答案 0 :(得分:1)
在id
是列的情况下使用:
df['correct'] = df.iloc[:, 1:].ne(0).all(axis=1)
#alternative solution
#df['correct'] = ~df.iloc[:, 1:].eq(0).any(axis=1)
print (df)
id col_1 col_2 col_3 correct
0 'jk3' 1.0 1.0 NaN True
1 'kp2' 1.0 1.0 1.0 True
2 'po0' 0.0 1.0 0.0 False
3 'in6' NaN 0.0 1.0 False
4 'ml5' 1.0 NaN 0.0 False
5 'lj3' 1.0 0.0 NaN False
详细信息:
首先用iloc
使所有列都排在前面,而没有第一:
print (df.iloc[:, 1:])
col_1 col_2 col_3
0 1.0 1.0 NaN
1 1.0 1.0 1.0
2 0.0 1.0 0.0
3 NaN 0.0 1.0
4 1.0 NaN 0.0
5 1.0 0.0 NaN
以不等于ne
进行比较:
print (df.iloc[:, 1:].ne(0))
col_1 col_2 col_3
0 True True True
1 True True True
2 False True False
3 True False True
4 True True False
5 True False True
最后检查每行all
True
s:
print (df.iloc[:, 1:].ne(0).all(axis=1))
0 True
1 True
2 False
3 False
4 False
5 False
dtype: bool
如果id
是索引:
df['correct'] = df.ne(0).all(axis=1)
print (df)
col_1 col_2 col_3 correct
id
'jk3' 1.0 1.0 NaN True
'kp2' 1.0 1.0 1.0 True
'po0' 0.0 1.0 0.0 False
'in6' NaN 0.0 1.0 False
'ml5' 1.0 NaN 0.0 False
'lj3' 1.0 0.0 NaN False
答案 1 :(得分:0)
检查df.count(),它给出数据帧的非空计数,然后您可以根据需要将其分配为true / false。