我有一个包含两列“互补”数据的 Pandas DataFrame。对于任何给定的行,有 3 种可能性:
1) A
列有一个非空值,B 列有一个空值 NaN
,我想将其替换为来自A
列。
2) A
列有一个空值 NaN
,我想用 B
列中的非空值替换它。
3) A
和 B
列都有空值,NaN
,这意味着我将保留 NaN
作为该行的值。
这是我的 DataFrame 的简化版本:
df1 = pd.DataFrame({'A' : ['keep1', np.nan, np.nan, 'keep4', np.nan],
'B' : [np.nan, 'keep2', np.nan, np.nan, np.nan]})
我想作为一个中间步骤,我会创建一个新列C
,其中包含我需要的条目:
df2 = pd.DataFrame({'A' : ['keep1', np.nan, np.nan, 'keep4', np.nan],
'B' : [np.nan, 'keep2', np.nan, np.nan, np.nan],
'C' : ['keep1', 'keep2', np.nan, 'keep4', np.nan]}
然后我将删除前两行 A
和 B
:
df_final = df2.drop(['A', 'B'], axis=1)
我实际的 DataFrame 有数百行,我尝试了几种方法( bool 过滤器、使用 iterrows
循环遍历 DataFrame、使用 DataFrame.where()
)没有成功。我认为这将是一个简单的问题,但我没有看到。感谢您的帮助。
谢谢
最佳答案
您可以使用 combine_first()
从 B 填补 A 中的空白:
df1['C'] = df1['A'].combine_first(df1['B'])
#0 keep1
#1 keep2
#2 NaN
#3 keep4
#4 NaN
关于python-3.x - Pandas 从两列之一中选择首选值来创建一个新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59133159/