У меня есть DataFrame
, похожее на:
x y z
--------------
0 A 10
0 D 13
1 X 20
...
, и у меня есть два отсортированных массива для каждого возможного значения для x
и y
:
x_values = [0, 1, ...]
y_values = ['a', ..., 'A', ..., 'D', ..., 'X', ...]
, поэтомуЯ написал функцию:
def lookup(record, lookup_list, lookup_attr):
return np.searchsorted(lookup_list, getattr(record, lookup_attr))
и затем вызвал:
df_x_indicies = df.apply(lambda r: lookup(r, x_values, 'x')
df_y_indicies = df.apply(lambda r: lookup(r, y_values, 'y')
# df_x_indicies: [0, 0, 1, ...]
# df_y_indicies: [26, ...]
но есть ли более эффективный способ сделать это?и, возможно, несколько столбцов одновременно, чтобы получить возвращенный DataFrame
, а не ряд?
Я пытался:
np.where(np.in1d(x_values, df.x))[0]
, но это удаляет повторяющиеся значения, а это нежелательно.