这个问题在这里已有答案:
我有两个数据帧,
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中的所有列合并Dataframe . 任何建议都会很棒
期望的输出:
Both_DFs
A B C BB CC DD
0 A1 121 K0 B0 121 D0
因此,在我的数据框架(df1和df2)中,只有一行与两个感兴趣的列完全匹配 . 也就是说,来自df1的A列和B列只有一行与df2中A列和CC列的行完全匹配
3 回答
你也可以使用带有默认左连接的join或merge,如果需要,可以使用dropna删除
NaN
的行:编辑:
我认为你需要
inner join
(默认情况下,所以on='inner'
可以省略):好吧,如果你将列
A
声明为索引,它可以工作:这导致:
EDIT
你只需要:
这使:
我不知道你的例子是否显示你的问题但是,
如果我们尝试与MultiIndex合并,我们需要有2个索引匹配 .
df1 ['A'] == df2 ['A'] && df1 ['B'] == df2 ['CC']
这里我们没有任何与2索引匹配的行 .
如果我们仅通过df1 ['A']合并,我们得到类似的结果:Both_DFs = pd.merge(df1,df2,how ='left',left_on = ['A'],right_on = ['A'])
如果您不想删除不在df2中的行行,请尝试将'how'方法更改为inner .
你正在寻找什么方法吗?