根据另一列中的“NaN”值在 Pandas Dataframe 中创建一个新列

数据挖掘 Python 熊猫 数据框
2022-02-22 07:49:16

根据单独列中的 nan 值创建新列的最有效方法是什么(考虑到数据框非常大)

1 2 3
4 5 NaN
7 8 9
3 2 NaN
5 6 NaN

应该给

1 2 3    0
4 5 NaN  1
7 8 9    0
3 2 NaN  1
5 6 NaN  1

编辑:

如果它基于 2 列怎么办?像:

1 2   3    0
4 NaN 1    1
7 8   9    0
3 2   NaN  1
5 NaN 2    1
2个回答
In [8]: %timeit df['B'] = df['A'].isnull()*1                                    
517 µs ± 145 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
In [7]: %timeit df['B'] = df['A'].isnull().astype(int)                          
283 µs ± 14.6 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
In [12]: %timeit df['C'] = np.where(np.isnan(df['A'].values), 1, 0)                                          
105 µs ± 5.97 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
In [13]: %timeit df['C'] = np.where(df['A'].isnull(), 1, 0)                                                  
227 µs ± 12.3 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

似乎完整的numpy解决方案 ( In [12]) 是最快的。

编辑:

对于跨多个列

df['C'] = np.where(np.any(np.isnan(df[['A', 'B']])), 1, 0)

试试这个 -

Column 是您的包含NaN值的列,而 columnB是新列

df['B'] = df['A'].isnull()*1