Если df
выглядит как
row col value
0 7 G 96
1 3 C 43
2 7 H 44
3 7 J 97
4 8 I 90
...
и q
равно
row col value
0 2 C foo
1 8 F bravo
2 9 F charlie
3 2 D bar
4 2 E qux
...
Приведенный ниже код служит цели, но работает слишком медленно.Как я могу оптимизировать это, чтобы работать быстрее?Это займет ~ 45 секунд, когда len(df) = 25000
.Мне нужно решить, когда len(df) >= 1e6
.
def foo(a):
try:
fxlter = q.loc[(q.row == a.row) & (q.col < a.col)]
return q.loc[fxlter.col.idxmax()].value
except ValueError:
return None
df['foo'] = df.nodes.apply(foo)
(Цель состоит в том, чтобы сопоставить имя столбца и имя строки с общим значением путем поиска метки ближайшей строки в q длякаждый элемент в df)

Желаемый результат:
row col value foo
0 7 G 96 alpha
1 3 C 43 foo
2 7 H 44 alpha
3 7 J 97 alpha
4 8 I 90 bravo
5 3 E 58 foo
6 8 H 95 bravo
7 7 I 49 alpha
8 3 D 22 foo
9 8 J 55 bravo