我的问题很简单,我正在使用pd.merge合并两个df。 这是代码行:
pivoted = pd.merge(pivoted, concerned_data, on='A')
,并且我希望每当行的A列值为null时就使用on ='B'。有没有办法做到这一点?
编辑:
例如
df1: A | B |randomval
1 | 1 | ty
Nan| 2 | asd
df2: A | B |randomval2
1 | Nan| tyrte
3 | 2 | asde
因此,如果on ='A'并且值Nan是任何df(对于单行),我只希望on ='B'用于该行
谢谢!
答案 0 :(得分:0)
您可以在pandas.DataFrame
中创建第三列,其中包含此逻辑并在此逻辑上进行合并。
例如,创建虚拟数据
df1 = pd.DataFrame({"A" : [1, None], "B" : [1, 2], "Val1" : ["a", "b"]})
df2 = pd.DataFrame({"A" : [1, 2], "B" : [None, 2], "Val2" : ["c", "d"]})
创建具有此逻辑的列c
df1["C"] = pd.concat([df1.loc[~df1.A.isna(), "A"], df1.loc[df1.A.isna(), "B"]],ignore_index=False)
df2["C"] = pd.concat([df2.loc[~df2.A.isna(), "A"], df2.loc[df2.A.isna(), "B"]],ignore_index=False)
最后,在此公共列上合并,仅包含您的值列
df3 = pd.merge(df1[["Val1","C"]], df2[["Val2","C"]], on='C')
In [27]: df3
Out[27]:
Val1 C Val2
0 a 1.0 c
1 b 2.0 d