2016-12-19 327 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