我有两个数据帧
df1 = pd.DataFrame({'A': ['A1', 'A1', 'A2', 'A3'],
'B': ['121', '345', '123', '146'],
'C': ['K0', 'K1', 'K0', 'K1']})
df2 = pd.DataFrame({'A': ['A1', 'A3'],
'BB': ['B0', 'B3'],
'CC': ['121', '345'],
'DD': ['D0', 'D1']})
现在我需要从df1的A列和B列以及df2的A列和CC列得到类似的行。 所以我尝试了一些可能的合并选项,比如:
both_DFS=pd.merge(df1,df2, how='left',left_on=['A','B'],right_on=['A','CC'])
这不会给我来自df2数据帧的行信息,这是我所需要的。意思是,我有df2中的所有列名,但行只是空的或Nan。
然后我试着:
Both_DFs=pd.merge(df1,df2, how='left',left_on=['A','B'],right_on=['A','CC'])[['A','B','CC']]
这给了我一个错误
KeyError: "['B'] not in index"
我的目标是有一个合并的数据帧,其中包含来自df1和df2的所有列。有什么建议很好
期望输出:
Both_DFs
A B C BB CC DD
0 A1 121 K0 B0 121 D0
所以在我的数据帧(df1和df2)中,只有一行与感兴趣的两列完全匹配。也就是说,来自df1的A列和B列只有一行与df2的A列和CC列中的行完全匹配
您还可以将^{} 与默认的左联接或^{} 一起使用,最后,如果需要,请通过^{} 删除
NaN
s中的行:编辑:
我认为您需要
inner join
(默认情况下,可以省略on='inner'
):我不知道你的例子是否显示了你的问题,但是
如果我们试图与多索引合并,我们需要2索引匹配。
df1['A]==df2['A]&;df1['B']==df2['CC']
这里没有与2索引匹配的行。
如果我们只通过df1['A]合并,我们得到如下结果: 两个都是DFs=pd.merge(df1,df2,how='left',left\u on=['A'],right\u on=['A'])
如果不删除不在df2中的行,请尝试将“how”方法更改为inner。
你要找的东西是这样的吗?
好吧,如果您将列
A
声明为索引,它可以工作:这将导致:
编辑
你只需要:
它给出:
相关问题 更多 >
编程相关推荐