首页 > 解决方案 > 除非 B 列的值为 NaN,否则如何将 A 列的所有值替换为 B 列的值?

问题描述

给定以下数据框:

import numpy as np
import pandas as pd

df = pd.DataFrame({"ColA": [1, 2, np.nan, 4, np.nan],
                   "ColB": [np.nan, 7, np.nan, 9, 10]})

   ColA  ColB
0   1.0   NaN
1   2.0   7.0
2   NaN   NaN
3   4.0   9.0
4   NaN  10.0

我想用 ColB 的值替换 ColA 的值,但我从不希望用 NaN 值替换非 NaN 值。我想要的输出是以下 DataFrame:

   ColA  ColB
0   1.0   NaN
1   7.0   7.0
2   NaN   NaN
3   9.0   9.0
4   10.0  10.0

我的实际数据非常大,所以虽然我知道我可以逐行迭代,但我正在寻找一种更有效的方法。

标签: pythonpandasnumpy

解决方案


df['ColA']= np.where(df['ColA'].notna(), np.where(df['ColB'].isna(),df['ColA'],df['ColB']), df['ColA'])

推荐阅读