Полярные — вычислять все остальные значения в окне, кроме этого. ⇐ Python

Программы на Python
Anonymous
Полярные — вычислять все остальные значения в окне, кроме этого.

Сообщение Anonymous »

Для каждой строки я пытаюсь вычислить стандартное отклонение для других значений в группе, исключая значение строки. Можно подумать об этом так: «каким было бы стандартное отклонение для группы, если бы значение этой строки было удалено». Возможно, будет проще разобрать пример:

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

df = pl.DataFrame(
{
"answer": ["yes","yes","yes","yes","maybe","maybe","maybe"],
"value": [5,10,7,8,6,9,10],
}
)

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

┌────────┬───────┐
│ answer ┆ value │
│ ---    ┆ ---   │
│ str    ┆ i64   │
╞════════╪═══════╡
│ yes    ┆ 5     │
│ yes    ┆ 10    │
│ yes    ┆ 7     │
│ yes    ┆ 8     │
│ maybe  ┆ 6     │
│ maybe  ┆ 9     │
│ maybe  ┆ 10    │
└────────┴───────┘
Я хотел бы добавить столбец, первая строка которого была бы std([10,7,8]) = 1,527525
Я пробовал чтобы взломать что-то вместе, и в итоге получился код, который ужасно читать, а также содержит ошибку, которую я не знаю, как обойти:

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

df.with_columns(
(
(pl.col("value").sum().over(pl.col("answer")) - pl.col("value"))
/ (pl.col("value").count().over(pl.col("answer")) - 1)
).alias("average_other")
).with_columns(
(
(
(
(pl.col("value") - pl.col("average_other")).pow(2).sum().over(pl.col("answer"))
- (pl.col("value") - pl.col("average_other")).pow(2)
)
/ (pl.col("value").count().over(pl.col("answer")) - 1)
).sqrt()
).alias("std_dev_other")
)
Я не уверен, что рекомендовал бы это анализировать, но я укажу по крайней мере на одну неправильную вещь:

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

pl.col("value") - pl.col("average_other")).pow(2).sum().over(pl.col("answer"))
Я хочу сравнивать «значение» в каждой строке со «средним_другим» из этой строки, а затем возводить в квадрат и суммировать по окну, но вместо этого я сравниваю «значение» в каждой строке с «средним_другим» " в каждой строке.
Мой главный вопрос: "Как лучше всего получить стандартное отклонение, не учитывая это значение?" часть. Но мне также было бы интересно, есть ли способ провести сравнение, которое я делаю неправильно выше. В-третьих, это советы о том, как написать это так, чтобы было легко понять, что происходит.

Подробнее здесь: https://stackoverflow.com/questions/753 ... t-this-one

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