Сообщество IT-специалистов
Ответы на любые вопросы об IT
Профессиональное развитие в IT
Удаленная работа для IT-специалистов
print('len search: ' + str(len(search))) print('len gr_lst: ' + str(len(gr_lst))) start = time.process_time() f1 = set(search) df22 = gr_lst.set_index('id') df3 = pd.DataFrame() for ident in df22.index: f2 = set(df22['gr_list'][ident]) result = f1&f2 if len(result): chunk = pd.DataFrame({'id': ident, 'gr_list': list(result)}) df3 = df3.append(chunk, ignore_index=True) print('time: ' + str(time.process_time() - start)) print(df3) start = time.process_time() df_search = pd.DataFrame(gr_lst['gr_list'].apply(lambda x: list(set(x) & set(search)))) df_search['id'] = gr_lst['id'] # Удаляем строки с пустыми списками df_search = df_search[df_search['gr_list'].str.len() != 0] # Преобразуем столбец со списком значений в строки df_search = df_search['gr_list'].apply(lambda x: pd.Series(x)).stack().reset_index(level=1, drop=True).to_frame('gr_list').join(df_search[['id']]) # Косметические преобразования df_search = df_search.astype({'gr_list': int}, copy=False).reset_index() df_search = df_search[['id', 'gr_list']] print('time: ' + str(time.process_time() - start)) print(df_search)
len search: 3229 len gr_lst: 60578 time: 13.109375 id gr_list 0 46774 126842973 1 46774 146897415 2 72269 2507641 3 128191 29046529 4 128191 48437003 ... ... ... 31178 593502493 195837567 31179 594033097 68291497 31180 594033097 39438402 31181 594033097 126842973 31182 598864135 126842973 [31183 rows x 2 columns] time: 10.0625 id gr_list 0 46774 126842973 1 46774 146897415 2 72269 2507641 3 128191 29046529 4 128191 48437003 ... ... ... 31178 593502493 195837567 31179 594033097 68291497 31180 594033097 39438402 31181 594033097 126842973 31182 598864135 126842973 [31183 rows x 2 columns]
search это df1
gr_lst это df2
В итоге получаем