我有两个数据框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_a
和y_a
,如果它们相同,则返回df1的索引。
对于此示例:
717 / 124 --> 5
338 / 127 --> 6
714 / 135 --> 10
...
答案 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_a
和y_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