Как сгенерировать уникальное имя временного столбца для использования в кадре данных Polars без конфликтов?Python

Программы на Python
Ответить
Anonymous
 Как сгенерировать уникальное имя временного столбца для использования в кадре данных Polars без конфликтов?

Сообщение Anonymous »

У меня есть специальная функция, которая выполняет некоторую очистку данных в Polars DataFrame. Для эффективности я кэширую некоторые результаты в середине и удаляю их в конце.
Это моя функция:

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

import polars as pl

def clean_data(df, cols):
return (
df.with_columns(pl.mean(col).alias(f"__{col}_mean") for col in cols)
.with_columns(
pl.when(pl.col(col) < pl.col(f"__{col}_mean") * 3 / 4)
.then(pl.col(f"__{col}_mean") * 3 / 4)
.when(pl.col(col) > pl.col(f"__{col}_mean") * 5 / 4)
.then(pl.col(f"__{col}_mean") * 5 / 4)
.otherwise(pl.col(col))
.alias(col)
for col in cols
)
.select(pl.exclude(f"__{col}_mean" for col in cols))
)
Он отлично работает для «обычных» входных данных:

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

df = pl.DataFrame(
{
"a": [1, 2, 3, 4, 5, 12, 28],
"a2": [1, 2, 3, 4, 5, 6, 7],
}
)

clean_data(df, ["a", "a2"])

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

shape: (7, 2)
┌──────────┬─────┐
│ a        ┆ a2  │
│ ---      ┆ --- │
│ f64      ┆ f64 │
╞══════════╪═════╡
│ 5.892857 ┆ 3.0 │
│ 5.892857 ┆ 3.0 │
│ 5.892857 ┆ 3.0 │
│ 5.892857 ┆ 4.0 │
│ 5.892857 ┆ 5.0 │
│ 9.821429 ┆ 5.0 │
│ 9.821429 ┆ 5.0 │
└──────────┴─────┘
Однако существует вероятность того, что имя моих кэшированных столбцов может конфликтовать с именем столбцов, существующих во входных данных пользователя, например:

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

df = pl.DataFrame(
{
"a": [1, 2, 3, 4, 5, 12, 28],
"a2": [1, 2, 3, 4, 5, 6, 7],
"__a_mean": [1, 1, 1, 1, 1, 1, 1],
}
)

clean_data(df, ["a", "a2"])

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

shape: (7, 2)
┌──────────┬─────┐
│ a        ┆ a2  │
│ ---      ┆ --- │
│ f64      ┆ f64 │
╞══════════╪═════╡
│ 5.892857 ┆ 3.0 │
│ 5.892857 ┆ 3.0 │
│ 5.892857 ┆ 3.0 │
│ 5.892857 ┆ 4.0 │
│ 5.892857 ┆ 5.0 │
│ 9.821429 ┆ 5.0 │
│ 9.821429 ┆ 5.0 │
└──────────┴─────┘
Как вы можете видеть, результат замаскировал столбец __a_mean в исходном DataFrame.
Есть ли способ добавить временные столбцы в середине вычислений и убедиться, что имена сгенерированных временных столбцов не существуют в исходном DataFrame?
Альтернативно, есть ли способ реализовать мою функцию выше без кэширования каких-либо результатов и без ущерба для производительности?>

Подробнее здесь: https://stackoverflow.com/questions/758 ... frame-with
Ответить

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

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

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

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

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