Эффективный способ получить минимальный кортеж из набора столбцов в полярахPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Эффективный способ получить минимальный кортеж из набора столбцов в полярах

Сообщение Anonymous »

Какой самый эффективный способ сделать это в полярах:

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

import polars as pl
import numpy as np
rng = np.random.default_rng()

df = pl.DataFrame([
pl.Series('a', rng.normal(size=10_000_000)),
pl.Series('b', rng.normal(size=10_000_000)),
])

df.sort('a', 'b').head(1)
Т.е. Я хочу найти наименьший кортеж чисел (a, b) на основе лексикографического порядка. Для поиска минимума не требуется полная сортировка, поэтому приведенный выше код очень неэффективен. Я попробовал

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

df.lazy().sort('a', 'b').head(1).collect()
но это не приводит к существенному ускорению. Создание одного столбца типа pl.Struct также не помогает, поскольку поляры, похоже, не определяют понятие порядка в структурах.
Обновить
Благодаря ответу ΩΠΟΚΕΚΡΥΜΜΕΝΟΣ я остановился на следующем решении:

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

def lexicographic_min(df):
columns = list(df.columns)
for col in columns:
if df.select(pl.col(col).is_null().any()).row(0)[0]:
df = df.filter(pl.col(col).is_null())
else:
df = df.filter(pl.col(col) == pl.col(col).min())
return df.row(0)

def lexicographic_max(df):
columns = list(df.columns)
for col in columns:
df = df.filter(pl.col(col) == pl.col(col).max())
return df.row(0)
Эта версия обрабатывает нулевые значения, считая их «меньше», чем любые ненулевые значения, и не требует никаких вызовов .sort().


Подробнее здесь: https://stackoverflow.com/questions/748 ... -in-polars
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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