【发布时间】: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