覆盖熊猫数据框列中的值

时间:2021-04-29 20:37:05

标签: python pandas

我有 2 个由 True、False 和 NA 值组成的数据框列,这些值的类型为 str。我如何将这些数据帧列合并在一起以制作另一个数据帧列,当 2 个数据帧列融合在一起时,使错误值覆盖真实值? 如果列是布尔值,我可以只使用“&”函数,但我似乎无法弄清楚,因为值是字符串。

我想把它们加在一起,然后试着用它做点什么。

df["merged"] = df["column 1"] + df["column 2"]

但我认为我走错了路

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)

您可以使用以下命令将 TrueFalse 字符串值转换为布尔值,将 NA 字符串值转换为 Pandas nullable boolean type

d = {'True': True, 'False': False, 'NA': pd.NA}

df['column 1'] = df['column 1'].map(d).astype('boolean')

然后就可以用&对两列进行逻辑比较了。