我有 2 个由 True、False 和 NA 值组成的数据框列,这些值的类型为 str。我如何将这些数据帧列合并在一起以制作另一个数据帧列,当 2 个数据帧列融合在一起时,使错误值覆盖真实值? 如果列是布尔值,我可以只使用“&”函数,但我似乎无法弄清楚,因为值是字符串。
我想把它们加在一起,然后试着用它做点什么。
df["merged"] = df["column 1"] + df["column 2"]
但我认为我走错了路
答案 0 :(得分:0)
您可以为此定义一个函数,然后将其应用于整个 DataFrame, 我的第一个条件意味着,如果列中的值相同,则保留第三列中的值,假设您希望 'NA' 相同。 第二个和第三个条件是当另一列具有“NA”值时选择“真”或“假”。 对于所有其他情况,返回“False”,即如果一列具有“True”值而另一列具有“False”,则这应该有效:
def and_func(x):
if x["column 1"] == x["column 2"]:
return x["column 1"]
elif ((x["column 1"] == 'NA') & (x["column 2"] != 'NA')):
return x["column 2"]
elif ((x["column 2"] == 'NA') & (x["column 1"] != 'NA')):
return x["column 1"]
else:
return "False"
df["merged"] = df.apply(lambda x: and_func(x), axis = 1)
答案 1 :(得分:0)
您可以使用以下命令将 True
和 False
字符串值转换为布尔值,将 NA
字符串值转换为 Pandas nullable boolean type:
d = {'True': True, 'False': False, 'NA': pd.NA}
df['column 1'] = df['column 1'].map(d).astype('boolean')
然后就可以用&
对两列进行逻辑比较了。