Результат группировки полярностей каждый раз меняет порядок строкPython

Программы на Python
Ответить
Anonymous
 Результат группировки полярностей каждый раз меняет порядок строк

Сообщение Anonymous »

На примере из раздела Агрегация Руководства пользователя

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

import polars as pl
from datetime import date

def compute_age() -> pl.Expr:
return date(2021, 1, 1).year - pl.col("birthday").dt.year()

def avg_birthday(gender: str) -> pl.Expr:
return compute_age().filter(
pl.col("gender") == gender
).mean().alias(f"avg {gender} birthday")

dataset = pl.read_csv(b"""
state,gender,birthday
GA,M,1861-06-06
MD,F,1920-09-17
PA,M,1778-10-13
KS,M,1926-02-23
CO,M,1959-02-16
IL,F,1937-08-15
NY,M,1803-04-30
TX,F,1935-12-03
MD,M,1756-06-03
OH,M,1786-11-15
""".strip(), try_parse_dates=True).lazy()

q = (
dataset
.group_by("state")
.agg(
avg_birthday("M"),
avg_birthday("F"),
(pl.col("gender") == "M").count().alias("# male"),
(pl.col("gender") == "F").sum().alias("# female"),
)
)
Результат противоречив. Например, когда я впервые запускаю q.collect().head()

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

shape: (5, 5)
┌───────┬────────────────┬────────────────┬────────┬──────────┐
│ state ┆ avg M birthday ┆ avg F birthday ┆ # male ┆ # female │
│ ---   ┆ ---            ┆ ---            ┆ ---    ┆ ---      │
│ str   ┆ f64            ┆ f64            ┆ u32    ┆ u32      │
╞═══════╪════════════════╪════════════════╪════════╪══════════╡
│ GA    ┆ 160.0          ┆ null           ┆ 1      ┆ 0        │
│ OH    ┆ 235.0          ┆ null           ┆ 1      ┆ 0        │
│ CO    ┆ 62.0           ┆ null           ┆ 1      ┆ 0        │
│ KS    ┆ 95.0           ┆ null           ┆ 1      ┆ 0        │
│ TX    ┆ null           ┆ 86.0           ┆ 1      ┆ 1        │
└───────┴────────────────┴────────────────┴────────┴──────────┘
Второй раз:

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

shape: (5, 5)
┌───────┬────────────────┬────────────────┬────────┬──────────┐
│ state ┆ avg M birthday ┆ avg F birthday ┆ # male ┆ # female │
│ ---   ┆ ---            ┆ ---            ┆ ---    ┆ ---      │
│ str   ┆ f64            ┆ f64            ┆ u32    ┆ u32      │
╞═══════╪════════════════╪════════════════╪════════╪══════════╡
│ TX    ┆ null           ┆ 86.0           ┆ 1      ┆ 1        │
│ OH    ┆ 235.0          ┆ null           ┆ 1      ┆ 0        │
│ CO    ┆ 62.0           ┆ null           ┆ 1      ┆ 0        │
│ NY    ┆ 218.0          ┆ null           ┆ 1      ┆ 0        │
│ GA    ┆ 160.0          ┆ null           ┆ 1      ┆ 0        │
└───────┴────────────────┴────────────────┴────────┴──────────┘
Думаю, это может быть вызвано распараллеливанием?
Это ошибка или особенность?
Как сохранить согласованность результата?

Подробнее здесь: https://stackoverflow.com/questions/721 ... -each-time
Ответить

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

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

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

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

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