2015-09-04 127 views
2

我有两个数据帧,包含多列。熊猫:比较两列并返回匹配的行

我想比较df1 ['postcode']和df2 ['pcd'],并根据这两列的匹配值构建一个新的df。

注 - 我想匹配的两列的长度不一样。

df1 
    postcode brand 
1 znuee soony 
2 eusjk nike 
3 zieum addidas 
4 psosk ferrari 

df2 
    pcd  brand 
1 dodkm soony 
2 eusjk nike 
3 sjksj addidas 
4 psosk ferrari 

输出:

​​

我尝试,但我得到的列

newdf = (df2['postcode'] == df1).all(axis=1).astype(int) 

我是否需要使用某种loopup功能不匹配长度是多少?

回答

4

您可以执行内部merge

In [134]: 
df1.merge(df2, left_on=['postcode', 'brand'], right_on=['pcd', 'brand']) 

Out[134]: 
    postcode brand pcd 
0 eusjk  nike eusjk 
1 psosk ferrari psosk 

然后,您可以删除 '邮编' 列或第一重命名为:

In [136]: 

df1.rename(columns={'postcode':'pcd'}).merge(df2) 
Out[136]: 
    pcd brand 
0 eusjk  nike 
1 psosk ferrari 
+0

该做的工作。我仍然不明白他们为什么称这种“合并”,它不应该被称为“合并”吗? –

+0

您正在合并列/索引,您可以指定在lhs和rhs上进行合并的条件,如果列名称匹配,那么它将匹配这些,默认的合并类型是内部的,因此只有在两者上都存在的值双方 – EdChum