我有一个带NaNs的数据框
df = pd.DataFrame({"A": [10,20,30, np.nan], "B": [20, np.nan, 10,np.nan]})
A B
0 10.0 20.0
1 20.0 NaN
2 30.0 10.0
3 NaN NaN
我想创建一个新列'C'。 在任何行中,如果“A”或“B”列都有NaN,则“C”列将设置为0,否则为1。
我想得到如下:
A B C
0 10.0 20.0 1
1 20.0 NaN 0
2 30.0 10.0 1
3 NaN NaN 0
我尝试了以下代码:
df['C'] = df.apply(lambda row:0 if (row['A']=='NaN' or row['B']=='NaN') else 1, axis=1)
我得到以下df。 C列始终设置为1。
A B C
0 10.0 20.0 1
1 20.0 NaN 1
2 30.0 10.0 1
3 NaN NaN 1
尝试以下代码:
df['C'] = df.apply(lambda row:0 if (row['A'].isnull() or row['B'].isnull()) else 1, axis=1)
得到以下错误。
AttributeError: ("'float' object has no attribute 'isnull'", 'occurred at index 0')
答案 0 :(得分:2)
使用notnull
+ all
:
df['C'] = df.notnull().all(1).astype(int)
df
A B C
0 10.0 20.0 1
1 20.0 NaN 0
2 30.0 10.0 1
3 NaN NaN 0