【问题标题】:Merging Data frames based on row values根据行值合并数据框
【发布时间】:2019-12-04 06:59:02
【问题描述】:

我有 2 个长度不等的数据帧。 df1是3列6行数据的数据框

   Col A  Col B   Col C
     1      2       3
     2      3       4
     3      4       5
     4      5       6
     5      6       7
     8      9      10

df2 是另一个包含 3 列 3 行数据的文件

    Col A   Col B   Col C
      4       5       9
      7       8      11
      9      10      13

我想合并 df1 和 df2,如果 df1 中的 col 2 和 col 3 以及 df2 中的 col 1 和 col 2 相等,则结果是 4 列的数据框,而其他行被删除

预期结果

   Col A  Col B  Col C Col D
    3      4      5     9
    8      9     10     13

代码

  import pandas as pd
  import numpy as np

  df1 = pd.DataFrame ({'colA': ['4', '7', '9'],
                       'colB': ['5', '8', '10'],
                       'colC': ['9', '11', '13']},
                        index=[0, 1, 2])


  df2 = pd.DataFrame ({'colA': ['1', '2', '3', '4', '5', '8'],
                       'colB': ['2', '3', '4', '5', '6', '9'],
                       'colC': ['3', '4', '5', '6', '7', '10']},
                        index=[0, 1, 2, 3, 4, 5])

  new_df = pd.merge(df1, df2,  how='left', left_on =['df1_colB','colC'], 
                                           right_on = ['df2_colA','colB'])

  print(new_df)

程序

  Exception has occurred: KeyError 

有没有其他方法可以使用 csv 来做到这一点?

【问题讨论】:

  • 您在left_on 中输入的内容应该是您的列名,所以colB 而不是df1_colB
  • 它让我得到了预期结果中除了 col A 之外的所有值。
  • 我有点困惑你想如何合并它们。你能补充一点细节吗?同时,通过 col 1.. 你真的是我 col A 吗?
  • 我想,我想让程序做的事情可以这样表述:比较df1和df2中的行时,如果df1中一行的col B和col C等于col A和col B df2 中的一行然后创建一个新的数据框(new_df),其中来自 df2 的 col C 添加为 df1 中的 colD

标签: python-3.x pandas csv data-cleaning


【解决方案1】:

我猜你混淆了数据框的顺序。请使用此代码,它不是您真正需要但关闭:

new_df = pd.merge(df2, df1,  how='inner', left_on =['colB','colC'], 
                                           right_on = ['colA','colB'])

【讨论】:

    【解决方案2】:

    尝试合并 df2df1 具有 rename 列名称以匹配 df2 中的 2 列

    df2.merge(df1.rename(columns={'colA': 'colB', 'colB': 'colC', 'colC':'colD'}))
    
    Out[14]:
      colA colB colC colD
    0    3    4    5    9
    1    8    9   10   13
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-05
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 2020-09-04
      • 1970-01-01
      • 2015-07-14
      • 2016-01-06
      相关资源
      最近更新 更多