【问题标题】:Python: how can I merge two dataframes on two column keys?Python:如何在两个列键上合并两个数据框?
【发布时间】:2021-05-27 21:27:06
【问题描述】:

我尝试使用合并函数在两个列键上合并两个数据帧,但它返回某些行的 NaN。我不确定出了什么问题。你能告诉我有什么问题吗?谢谢!

df1

             VR Ccy_1 Ccy_2 Qualifier     Ccy_Gp1     Ccy_Gp2
0  2.864298e+08   BRL   KRW    BRLKRW  Category 2  Category 2
1  9.547661e+08   BRL   USD    BRLUSD  Category 2  Category 1
2  1.145719e+08   CNY   SGD    CNYSGD  Category 2  Category 2
3 -3.819065e+08   EUR   QAR    EURQAR  Category 1  Category 3
4  1.183910e+09   GBP   USD    GBPUSD  Category 1  Category 1
5 -1.432149e+08   HKD   KRW    HKDKRW  Category 2  Category 2
6 -1.145719e+08   RUB   TRY    RUBTRY  Category 2  Category 2

df2

       Ccy_Gp1      Ccy_Gp2  Vega Concentration threshold (USD)
0   Category 1   Category 1                          3900000000
1  Category 1    Category 2                          1400000000
2  Category 1    Category 3                           640000000
3   Category 2   Category 2                           690000000
4   Category 2   Category 3                           440000000
5  Category 3    Category 3                           280000000
6   Category 2  Category 1                           1400000000
7   Category 3  Category 1                            640000000
8   Category 3   Category 2                           440000000

这是我的代码

df=pd.merge(df1,df2,on=['Ccy_Gp1','Ccy_Gp2'], how='left')

返回的数据帧

             VR Ccy_1 Ccy_2 Qualifier     Ccy_Gp1     Ccy_Gp2  Vega Concentration threshold (USD)
0  2.864298e+08   BRL   KRW    BRLKRW  Category 2  Category 2                        6.900000e+08
1  9.547661e+08   BRL   USD    BRLUSD  Category 2  Category 1                                 NaN
2  1.145719e+08   CNY   SGD    CNYSGD  Category 2  Category 2                        6.900000e+08
3 -3.819065e+08   EUR   QAR    EURQAR  Category 1  Category 3                                 NaN
4  1.183910e+09   GBP   USD    GBPUSD  Category 1  Category 1                        3.900000e+09
5 -1.432149e+08   HKD   KRW    HKDKRW  Category 2  Category 2                        6.900000e+08
6 -1.145719e+08   RUB   TRY    RUBTRY  Category 2  Category 2                        6.900000e+08

【问题讨论】:

  • 这意味着df1 中的特定鱼子在df2 中与'Ccy_Gp1','Ccy_Gp2 不匹配
  • 查看pandas.pydata.org/pandas-docs/stable/user_guide/merging.html,了解合并的工作原理可能会有所帮助。也许你正在寻找 how='inner'
  • 对于Category 2 Category 1Category 1 Category 3 组合,他们应该能够在这两个键上与df2 匹配?我想知道这是否是由于格式问题,因为列 'Ccy_Gp1` 和 Ccy_Gp2 中的数据没有对齐
  • @Cryckx 我尝试使用内部,但它也不起作用
  • 你能用print(df.to_string())打印整个数据框吗

标签: python pandas merge


【解决方案1】:

在进行合并之前,您可以尝试类似的方法从 df2 中的“Ccy_Gp1”列中删除空格:

df2['Ccy_Gp1'] = df2['Ccy_Gp1'].map(lambda x: x.lstrip())

【讨论】:

  • 我使用代码从Ccy_Gp1Ccy_Gp2 两列中删除了空格,但它们仍然不能很好地合并
猜你喜欢
  • 2021-09-14
  • 1970-01-01
  • 1970-01-01
  • 2019-10-31
  • 1970-01-01
  • 2019-07-26
  • 2017-11-26
  • 2019-10-27
  • 1970-01-01
相关资源
最近更新 更多