我有两个数据帧。 (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
答案 0 :(得分:1)
您可以使用isin
与df1
的每一列进行比较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
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
。