根据特定列中NaN的存在,在python数据框中创建一个新列

时间:2017-11-17 19:07:33

标签: python pandas dataframe na

我有一个带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')

1 个答案:

答案 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