У меня огромный массив данных с product_id и их property_id. Обратите внимание, что для каждого свойства начинается новый индекс. Мне нужно фильтровать одновременно по различным значениям property_id для каждого product_id. Есть ли способ сделать это быстро?
out_df
product_id property_id
0 3588 1
1 3588 2
2 3588 5
3 3589 1
4 3589 3
5 3589 5
6 3590 1
7 3590 2
8 3590 5
Например, вы хотите отфильтровать для каждого product_id два свойства, которые присваиваются различным строкам, таким как out_df.loc[(out_df['property_id'] == 1) & (out_df['property_id'] == 2)]
, но вместо него).
Мне нужно что-то подобное, но работает одновременно для всех строк каждого столбца product_id.
Я знаю, что это можно сделать через groupby
в списки
3587 [2, 1, 5]
3588 [1, 3, 5]
3590 [1, 2, 5]
и поиск пересечений внутри списков.
gp_df.apply(lambda r: {1, 2} < (set(r['property_id'])), axis=1)
Но это требует времени, и в то же время обычная фильтрация Pandas значительно оптимизируется по скорости (поверьте в использование некоторых хитрых прямых и обратных индексов внутри того, что делают поисковые системы, такие как ElasticSearch, Sphinx и т. Д.).
Ожидаемый результат : где оба {1 и 2} имеют.
3587 [2, 1, 5]
3590 [1, 2, 5]