根据单独列中的 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
根据单独列中的 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
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