熊猫-合并2个具有相同列名但互斥值的df

时间:2019-06-26 13:19:12

标签: python pandas

  • 我有1个主要df MainDF,其中的列键和其他不相关的列。
    • 我还有另外2个df,dfA和dfB,其中有2列,分别是键和价目表。 dfA和dfB中的密钥是互斥的,即dfA和dfB中都没有密钥。
    • 在MainDF上,我执行:MainDF.merge(dfA, how = 'left', on='key'),它将为dfA和MainDF中的键添加“价目表”列到MainDF中。这会将NaN放到MainDF中的所有键中,而不是dfA中
    • 现在,我需要执行MainDF.merge(dfB, how = 'left', on='key')来在MainDF中添加密钥的资费,但在dfA中不需要。
    • 当我进行第二次合并时,它将在MainDF 2列中创建riff_x和riff_y,因为在第一次合并之后,关税已经在MainDF中。但是,由于键是互斥的,因此我尽可能地只保留非NaN值的一栏费率。

我应该如何以python方式进行操作?我可以添加一个新列,它是riff_x或riff_y,但是我觉得不太优雅。

谢谢

2 个答案:

答案 0 :(得分:0)

在合并dfA之前,您可以先concat dfBMainDF

MainDF.merge(pd.concat([dfA, dfB], axis=0), how='left', on='key')

答案 1 :(得分:0)

您需要这样的东西吗?

dfA = pd.DataFrame({'tariff': [1, 2, 3], 'A': list('abc')})
dfB = pd.DataFrame({'tariff': [4, 5, 6], 'A': list('def')})

dfJoin = pd.concat([dfA, dfB], ignore_index=True)

     A    B  tariff
0    a  NaN       1
1    b  NaN       2
2    c  NaN       3
3  NaN    d       4
4  NaN    e       5
5  NaN    f       6

现在您可以与dfJoin合并。