Pandas вхождение подстроки из одной колонки в строку в другой колонке

Есть такие колонки. Как взять те строки week_num, которые входят во freq, не через apply?

 df[df.apply(lambda x: str(x.week_num)[0] in x.freq, axis=1)]

введите сюда описание изображения


Ответы (1 шт):

Автор решения: D.Vinogradov

Попробуйте с numpy

Для примера создадим рандомный фрейм с двумя строковыми столбцами

N = 10000000

s_arr = pd.util.testing.rands_array(10, N)
s_arr2 = pd.util.testing.rands_array(3, N)
df = pd.DataFrame({'a': s_arr2, 'b': s_arr})
>>> df.head()

     a          b
0   TVE gn2C0WYQ5U
1   3SA 6TBa2w9bTV
2   sC9 uDACJo04ap
3   f4M wZFME4keay
4   J3W 7137gaMft8

Проверим по времени работы.

Ваш вариант:

df[df.apply(lambda x: str(x.a) in x.b, axis=1)]

%%time
Wall time: 4min 52s

Другой вариант, очень похожий на Ваш:

df[df.apply(lambda x: x[0] in x[1], axis=1)]

%%time
Wall time: 2min 21s

Вариант с использованием numpy:

v = np.vectorize(lambda x, y: x in y)
df[v(df.a, df.b)]

%%time
Wall time: 2.78 s

Выбор очевиден.

P.S. Естественно нужно перевести изначально столбцы в строковый формат.

→ Ссылка