首页 > 解决方案 > Pandas 中的条件合并

问题描述

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

pivoted = pd.merge(pivoted, concerned_data, on='A')

每当一行的 A 列值为空时,我都想要 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' 用于该行

谢谢!

标签: pandas

解决方案


您可以在其中创建第三列,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

推荐阅读