2015-09-04 128 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