熊猫将1列的值与另一个数据框的列进行比较,找到匹配的行

时间:2018-08-16 21:48:39

标签: python python-2.7 pandas dataframe pd

我有一个数据库,该数据库将引入事件和警报的SQL表(df1),并且有一个警报代码和属性(df2)的txt文件要监视。想要使用来自df2的1个列值,每个值都需要与df1中的整个列值进行交叉检查,然后将匹配的所有列的全部行输出到另一个数据帧df3中。

df1     A   B   C   D
0     100  20   1   1
1     101  30   1   1
2     102  21   2   3
3     103  15   2   3
4     104  40   2   3

df2     0   1   2   3   4
0      21   2   2   3   3
1      40   0 NaN NaN NaN

从df1中将B列与df2列0值中的任何一个匹配的整个行输出到df3中。

df3     A   B   C   D
0     102  21   2   3
1     104  40   2   3

我能够使用以下方法获得单个结果:

df1[df1['B'] == df2.iloc[0,0]]

但是我需要能够在更大范围内做到这一点的东西。

1 个答案:

答案 0 :(得分:3)

方法1:merge

B0上使用merge。然后仅选择df1

df1.merge(df2, left_on='B', right_on='0')[df1.columns]

     A   B  C  D
0  102  21  2  3
1  104  40  2  3

方法2:loc

或者使用locdf1中查找行,其中Bdf20中使用.isin进行匹配:

df1.loc[df1.B.isin(df2['0'])]

     A   B  C  D
2  102  21  2  3
4  104  40  2  3