У меня есть следующий фрейм данных
df = pl.DataFrame({
"col1": [1, 2, 3],
"col2": [4, 5, 6],
"col3": [7, 8, 9],
"col4": ["a", "v", "b"], })
Я хотел бы добавить столбец, содержащий отклонение для всех столбцов, кроме col4
.
На данный момент я нашел это, которое может обойти недостаток горизонтальных вычислений в полярах.
df = (
(_df := df.with_row_index('i'))
.join(
_df.melt('i').group_by('i').agg(pl.col('value').var()),
on='i'
)
.sort('i')
.drop('i')
)
Однако это происходит только тогда, когда все столбцы числовые. Есть ли способ исключить col4
, но сохранить его в конечном кадре данных?
import polars.selectors as cs
df.with_columns(var = pl.concat_list(cs.numeric()).list.var())
┌──────┬──────┬──────┬──────┬─────┐
│ col1 ┆ col2 ┆ col3 ┆ col4 ┆ var │
│ --- ┆ --- ┆ --- ┆ --- ┆ --- │
│ i64 ┆ i64 ┆ i64 ┆ str ┆ f64 │
╞══════╪══════╪══════╪══════╪═════╡
│ 1 ┆ 4 ┆ 7 ┆ a ┆ 9.0 │
│ 2 ┆ 5 ┆ 8 ┆ v ┆ 9.0 │
│ 3 ┆ 6 ┆ 9 ┆ b ┆ 9.0 │
└──────┴──────┴──────┴──────┴─────┘
очень элегантно! Спасибо!