在两个pandas数据帧中选择相同的条目

时间:2016-10-14 08:15:22

标签: python pandas dataframe

我有两个数据帧。 (a,b,c,d)和(i,j,k)是名称列dataframes

df1 =

  a  b  c  d
  0  1  2  3
  0  1  2  3
  0  1  2  3

df2 =

  i  j  k  
  0  1  2  
  0  1  2  
  0  1  2  

我想选择df1为df2的条目 我想获得

 df1=   

  a  b  c  
  0  1  2  
  0  1  2  
  0  1  2  

2 个答案:

答案 0 :(得分:1)

您可以使用isindf1的每一列进行比较df2

dfs = []
for i in range(len(df2.columns)):
    df = df1.isin(df2.iloc[:,i])
    dfs.append(df)

然后concat全部掩盖在一起:

mask = pd.concat(dfs).groupby(level=0).sum()
print (mask)
      a     b     c      d
0  True  True  True  False
1  True  True  True  False
2  True  True  True  False

申请boolean indexing

print (df1.ix[:, mask.all()])
   a  b  c
0  0  1  2
1  0  1  2
2  0  1  2

答案 1 :(得分:0)

进行逐列比较会得到所需的结果:

df1 = df1[(df1.a == df2.i) & (df1.b == df2.j) & (df1.c == df2.k)][['a','b','c']]

您只能获得df1中那些前三列的值与df2的值相同的行。

然后,您只需从'a','b','c'选择行df1