2016-12-19 248 views
-1

我有一個熊貓數據框。從另外兩個數據幀中獲取熊貓數據幀

df = pd.DataFrame({'countries':['US','UK','Germany','China','India','Pakistan','lanka'], 
       'id':['a','b','c','d','e','f','g']}) 

我還有兩個數據框。 df2和df3。

df2 = pd.DataFrame({'countries':['Germany','China'], 
       'capital':['c','d']}) 

df3 = pd.DataFrame({'countries':['lanka','USA'], 
       'capital':['g','a']}) 

我想找到DF的行,其中df是在DF2和DF3

我有這個代碼:

df[df.id.isin(df2.capital)] 

,但它會發現這是DF2行。

有沒有什麼辦法可以在單個代碼中同時執行df2和df3。從DF其中Df是DF2和DF3

+0

你有沒有試過'df [(df.id.isin(df2.capital))&(df.id.isin(df3.capital))]'? – EdChum

+0

那麼你的問題是不正確的,你已經說過你想要df2和df2中的行,這就是我所建議的。你在df2 **或** df3的行之後?這是完全不同的事情,你沒有發佈你想要的輸出 – EdChum

回答

1

i'e行我認爲你需要簡單地總結起來既列表:

print (df[df.id.isin(df2.capital.tolist() + df3.capital.tolist())]) 
    countries id 
0  US a 
2 Germany c 
3  China d 
6  lanka g 

另一種解決方案是使用numpy.setxor1d - 設置兩個異或數組:

print (df[df.id.isin(np.setxor1d(df2.capital, df3.capital))]) 
    countries id 
0  US a 
2 Germany c 
3  China d 
6  lanka g 

或者與or評論的解決方案 - |

print (df[(df.id.isin(df2.capital)) | (df.id.isin(df3.capital))]) 
    countries id 
0  US a 
2 Germany c 
3  China d 
6  lanka g 
+0

爲什麼我在運行EdChum代碼時得到空的數據框? – Shubham

+0

什麼是期望的輸出? – jezrael

+0

你的代碼'print(df [df.id.isin(df2.capital.tolist()+ df3.capital.tolist())])'給我所期望的輸出 – Shubham