Условное применение методов к столбцам сводной таблицыPython

Программы на Python
Anonymous
Условное применение методов к столбцам сводной таблицы

Сообщение Anonymous »

Очень нравится цепляться за поляры. Это почти похоже на dplyr в R. Вопрос: есть ли способ условно применить fill_null ко всем столбцам таблицы (т. е. заменить на 0 для числовых значений и на «0%» для str в приведенном ниже примере)? Как старый mutate_if в R-dplyr.
import polars as pl

scores = pl.DataFrame(
{
"zone": ["North", "North", "North", "South", "South", "East", "East", "East", "East"],
"funding": ["yes", "yes", "no", "no", "no", "no", "no", "yes", "yes"],
"score": [78, 39, 76, 56, 67, 89, 100, 55, 80],
}
)

(
scores.group_by("zone", "funding").len()
.with_columns(
pl.col("len").over("funding"),
pl.format(
"{}%",
(pl.col("len") * 100 / pl.sum("len"))
.over("funding")
.round(2),
).alias("perc"),
)
.pivot("funding", index="zone")
.with_columns(
pl.col("len_yes").fill_null(0),
pl.col("perc_yes").fill_null("0%")
)
)

shape: (3, 5)
┌───────┬────────┬─────────┬─────────┬──────────┐
│ zone ┆ len_no ┆ len_yes ┆ perc_no ┆ perc_yes │
│ --- ┆ --- ┆ --- ┆ --- ┆ --- │
│ str ┆ u32 ┆ u32 ┆ str ┆ str │
╞═══════╪════════╪═════════╪═════════╪══════════╡
│ South ┆ 2 ┆ 0 ┆ 40.0% ┆ 0% │
│ North ┆ 1 ┆ 2 ┆ 20.0% ┆ 50.0% │
│ East ┆ 2 ┆ 2 ┆ 40.0% ┆ 50.0% │
└───────┴────────┴─────────┴─────────┴──────────┘

Могу ли я выполнить fill_null() по dtype без необходимости называть каждый столбец индивидуально?
EDIT: Судя по предложениям, приведенное ниже работает, если вы хотите явно указать типы столбцов, чтобы применить метод is_null к столбцам разных типов
(
scores.group_by("zone", "funding").len()
.with_columns(
pl.col("len").over("funding"),
pl.format(
"{}%",
(pl.col("len") * 100 / pl.sum("len"))
.over("funding")
.round(2),
).alias("perc"),
)
.pivot("funding", index="zone")
.with_columns(
pl.exclude(pl.String).fill_null(0),
pl.col(pl.String).fill_null("0%")
)
)


Подробнее здесь: https://stackoverflow.com/questions/750 ... ivot-table

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