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. Естественно нужно перевести изначально столбцы в строковый формат.
