Polars: ускорена функция применения для поиска общих элементов списка.Python

Программы на Python
Ответить
Anonymous
 Polars: ускорена функция применения для поиска общих элементов списка.

Сообщение Anonymous »

Я пытаюсь найти общие элементы в столбце списка относительно ссылочной ячейки. Я мог бы сделать это с небольшим набором данных, но столкнулся с двумя проблемами. Скорость мучительно низкая даже для 25 строк выборочных данных (20,7 с ± 52 мс на цикл), и я не смог найти более быструю реализацию с помощью Map_batches, которая может использовать распараллеливание в отличие от Map_elements, которая работает в одном потоке.
В настоящее время у меня работает следующая версия:

Код: Выделить всё

import polars as pl
import numpy as np

df = pl.DataFrame({'animal': ['goat','tiger','goat','tiger','lion','goat','tiger','lion'], 'food': ['grass','rabbit','carrots','deer','zebra','water','water','water']})
dl = df.group_by('animal', maintain_order=True).all()
dl

Код: Выделить всё

shape: (3, 2)
┌────────┬───────────────────────────────┐
│ animal ┆ food                          │
│ ---    ┆ ---                           │
│ str    ┆ list[str]                     │
╞════════╪═══════════════════════════════╡
│ goat   ┆ ["grass", "carrots", "water"] │
│ tiger  ┆ ["rabbit", "deer", "water"]   │
│ lion   ┆ ["zebra", "water"]            │
└────────┴───────────────────────────────┘

Код: Выделить всё

refn = dl['food'][1].to_numpy()

dl = dl.with_columns(
pl.col('food').map_elements(lambda x: np.intersect1d(refn,x.to_numpy()), return_dtype=pl.List(pl.String))
)

dl

Код: Выделить всё

shape: (3, 2)
┌────────┬─────────────────────────────┐
│ animal ┆ food                        │
│ ---    ┆ ---                         │
│ str    ┆ list[str]                   │
╞════════╪═════════════════════════════╡
│ goat   ┆ ["water"]                   │
│ tiger  ┆ ["deer", "rabbit", "water"] │
│ lion   ┆ ["water"]                   │
└────────┴─────────────────────────────┘
Любая помощь будет принята с благодарностью.
TIA.


Подробнее здесь: https://stackoverflow.com/questions/726 ... t-elements
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»