如何使用一个数据框搜索另一数据框的值和索引

时间:2019-09-12 13:20:09

标签: pandas numpy dataframe

我有两个数据框df1:

    x_a  y_a
0    39   87
1   379   97
2   280  105
3   348  107
4   275  111
5   717  124
6   338  127
7   301  129
8   351  133
9   403  134
10  714  135
11  716  136
12  451  139
13  677  154
14  430  155
15  575  160
16  738  163
17  642  165
18  463  176
19  534  184

和df2:

     x_a  y_a  x_b  y_b  distance
88   717  124  720  129  5.830952
103  338  127  338  127  0.000000
168  714  135  720  129  8.485281
170  714  135  706  136  8.062258
184  716  136  720  129  8.062258
268  738  163  734  158  6.403124
317  534  184  536  184  2.000000

我想在df1中搜索df2的值x_ay_a,如果它们相同,则返回df1的索引。 对于此示例:

717 / 124 --> 5
338 / 127 --> 6
714 / 135 --> 10
...

2 个答案:

答案 0 :(得分:2)

您可以将索引复制到新列,然后合并两个数据框:

>>> df1 = DataFrame({'x_a': [39, 379, 280, 348], 'y_a': [87, 97, 105, 107]})
>>> df1['index1'] = df1.index
>>> df1
   x_a  y_a  index1
0   39   87       0
1  379   97       1
2  280  105       2
3  348  107       3
>>> df2 = DataFrame({'x_a': [280, 1], 'y_a': [105, 2]})
>>> merged = df1.merge(df2, on=['x_a', 'y_a'])
>>> merged
   x_a  y_a  index1
0  280  105       2
>>> merged.set_index(merged['index1'], inplace=True)
>>> merged
        x_a  y_a  index1
index1
2       280  105       2

答案 1 :(得分:1)

您可以在两个DataFrame中创建一个合并为元组的x_ay_a列:

df1["combined"] = tuple(zip(df1["x_a"], df1["y_a"]))
df2["combined"] = tuple(zip(df2["x_a"], df2["y_a"]))

然后根据DF2中的值过滤DF1:

df1[df1["combined"].isin(df2["combined"].unique())].index

相关问题