Pandas 熊猫中的条件合并

Pandas 熊猫中的条件合并,pandas,Pandas,我的问题很简单,我使用pd.merge来合并两个df。 以下是代码行: pivoted=pd.merge(pivoted,相关数据,on='A') 每当一行的列的值为null时,我都需要on='B'。有没有一种可能的方法可以做到这一点 编辑: 例如,如果 df1: A | B |randomval 1 | 1 | ty Nan| 2 | asd 因此,如果on='A'的值为Nan,则为任何df(对于一行),我只希望该行on='B' 谢谢大家! 您可以在p

我的问题很简单,我使用pd.merge来合并两个df。 以下是代码行:

pivoted=pd.merge(pivoted,相关数据,on='A')

每当一行的列的值为null时,我都需要on='B'。有没有一种可能的方法可以做到这一点

编辑:

例如,如果

 df1:   A | B |randomval
        1 | 1 |   ty
       Nan| 2 | asd
因此,如果on='A'的值为Nan,则为任何df(对于一行),我只希望该行on='B'


谢谢大家!

您可以在
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

您可以创建吗?在另一个数据帧中隔离“A”为空的行,在此数据帧上合并“B”,在原始数据帧中删除na行,并在剩余数据帧上合并“A”,不包含空“A”。然后concatI希望有一个更简单的解决方案,因为我可以合并三列,但有些行可能会错过其中任何一列。现在,我已经实现了@Mayelsgc建议。好吧,但我怎么知道我在这两列中比较的是哪个值呢?我的意思是只能在A或B上进行合并,但该值必须同时在df中。好的
C
相当于
A
,其中
。isna()
为false,否则它将相当于
B
,因此这些是您正在合并的值。我不知道你说的这些到底是什么意思。。。也许在您的问题中,可以根据您提供的两个
df
,提供一个所需输出的示例,这样我就可以看出上面的问题所在。我只是简单地使用了它,并实现了我所想的逻辑,如果on='A'的值为Nan,则它是我只希望在='B'上为该行指定的任何df(对于一行)
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