Агрегация «n_unique» с использованием реляционного API DuckDB, который считает нулиPython

Программы на Python
Ответить
Anonymous
 Агрегация «n_unique» с использованием реляционного API DuckDB, который считает нули

Сообщение Anonymous »

Аналогично агрегации «n_unique» с использованием реляционного API DuckDB
Но мне нужно посчитать нулевые значения
Скажем, да

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

import duckdb

rel = duckdb.sql('select * from values (1, 4), (2, null), (null, null) df(a, b)')
rel

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

Out[3]:
┌───────┬───────┐
│   a   │   b   │
│ int32 │ int32 │
├───────┼───────┤
│     1 │     4 │
│     2 │  NULL │
│  NULL │  NULL │
└───────┴───────┘
Я хотел бы создать Duckdb.Expression, который я могу использовать для подсчета количества уникальных значений, включая нули
Решение предложено в связанном вопросе:

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

def n_unique(column_name: str) -> duckdb.Expression:
return duckdb.FunctionExpression(
'array_unique',
duckdb.FunctionExpression(
'array_agg',
duckdb.ColumnExpression(column_name)
)
)
здесь не совсем правильно, поскольку он пропускает нули:

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

In [39]: rel.aggregate([n_unique('a'), n_unique('b')])
Out[39]:
┌────────────────────────────┬────────────────────────────┐
│ array_unique(array_agg(a)) │ array_unique(array_agg(b)) │
│           uint64           │           uint64           │
├────────────────────────────┼────────────────────────────┤
│                          2 │                          1 │
└────────────────────────────┴────────────────────────────┘
Мой ожидаемый результат:

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

In [39]: rel.aggregate([n_unique('a'), n_unique('b')])
Out[39]:
┌────────────────────────────┬────────────────────────────┐
│ array_unique(array_agg(a)) │ array_unique(array_agg(b)) │
│           uint64           │           uint64           │
├────────────────────────────┼────────────────────────────┤
│                          3 │                          2 │
└────────────────────────────┴────────────────────────────┘
Как мне этого добиться?

Подробнее здесь: https://stackoverflow.com/questions/793 ... unts-nulls
Ответить

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

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

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

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

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