Лучший способ агрегирования в PolarsPython

Программы на Python
Ответить
Anonymous
 Лучший способ агрегирования в Polars

Сообщение Anonymous »

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

import random
from datetime import datetime, timedelta
import polars as pl

data = []

measurements = {
'occupation': [],
'weight': [],
'height': [],
'bmi': [],
'sugar_level': [],
}

for j in range(1000000):
weight = random.uniform(50, 100)
height = random.uniform(4.5, 7)
bmi = weight / (height ** 2)
sugar_level = random.uniform(70, 150)
measurements['occupation'].append(random.choice(['Engineer', 'Doctor', 'Teacher', 'Artist']))
measurements['weight'].append(weight)
measurements['height'].append(height)
measurements['bmi'].append(bmi)
measurements['sugar_level'].append(sugar_level)

df = pl.DataFrame(measurements)

filter_required = ((pl.col('sugar_level') > 40) & (pl.col('weight') >= 30))
other_filter = ((pl.col('weight') < 60))

groups = (
df.group_by('occupation')
.agg(
q10=pl.col('bmi').filter(filter_required).quantile(0.10),
q25=pl.col('bmi').filter(filter_required).quantile(0.25),
q50=pl.col('bmi').filter(filter_required).quantile(0.50),
q75=pl.col('bmi').filter(filter_required).quantile(0.75),
q90=pl.col('bmi').filter(filter_required).quantile(0.90),
q25_sugar=pl.col('sugar_level').filter(other_filter).quantile(0.25),
q50_sugar=pl.col('sugar_level').filter(other_filter).quantile(0.50),
q75_sugar=pl.col('sugar_level').filter(other_filter).quantile(0.75)
))

Выше приведен мой фрагмент: я применяю один и тот же фильтр несколько раз внутри группы, и это, похоже, замедляет мои вычисления. Я показал фиктивный пример. Но мой вопрос: можно ли не использовать один и тот же фильтр несколько раз внутри группы? оптимизированный способ сделать?

Подробнее здесь: https://stackoverflow.com/questions/768 ... -in-polars
Ответить

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

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

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

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

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