Поляры, заменяющие ценности других групп ценностями определенной группыPython

Программы на Python
Ответить
Anonymous
 Поляры, заменяющие ценности других групп ценностями определенной группы

Сообщение Anonymous »

У меня есть следующий Polars.DataFrame:

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

df = pl.DataFrame(
{
"timestamp": [1, 2, 3, 1, 2, 3],
"var1": [1, 2, 3, 3, 4, 5],
"group": ["a", "a", "a", "b", "b", "b"],
}
)
print(df)

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

shape: (6, 3)
┌───────────┬──────┬───────┐
│ timestamp ┆ var1 ┆ group │
│ ---       ┆ ---  ┆ ---   │
│ i64       ┆ i64  ┆ str   │
╞═══════════╪══════╪═══════╡
│ 1         ┆ 1    ┆ a     │
│ 2         ┆ 2    ┆ a     │
│ 3         ┆ 3    ┆ a     │
│ 1         ┆ 3    ┆ b     │
│ 2         ┆ 4    ┆ b     │
│ 3         ┆ 5    ┆ b     │
└───────────┴──────┴───────┘
Я хочу заменить значения группы b значениями группы a, имеющими одинаковые временные метки.
Желаемый результат:

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

shape: (6, 3)
┌───────────┬──────┬───────┐
│ timestamp ┆ var1 ┆ group │
│ ---       ┆ ---  ┆ ---   │
│ i64       ┆ i64  ┆ str   │
╞═══════════╪══════╪═══════╡
│ 1         ┆ 1    ┆ a     │
│ 2         ┆ 2    ┆ a     │
│ 3         ┆ 3    ┆ a     │
│ 1         ┆ 1    ┆ b     │
│ 2         ┆ 2    ┆ b     │
│ 3         ┆ 3    ┆ b     │
└───────────┴──────┴───────┘
У меня есть текущее решение с созданием вспомогательного df:

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

def group_value_replacer(
df: pl.DataFrame,
target_group_col: str,
target_var: str,
target_group: str,
):

helper_df = df.filter(pl.col(target_group_col) == target_group)
df = df.drop(target_var).join(
helper_df.drop(target_group_col),
on=["timestamp"],
how="left",
)

return df

group_value_replacer(df, "group", "var1", "a")

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

shape: (6, 3)
┌───────────┬───────┬──────┐
│ timestamp ┆ group ┆ var1 │
│ ---       ┆ ---   ┆ ---  │
│ i64       ┆ str   ┆ i64  │
╞═══════════╪═══════╪══════╡
│ 1         ┆ a     ┆ 1    │
│ 2         ┆ a     ┆ 2    │
│ 3         ┆ a     ┆ 3    │
│ 1         ┆ b     ┆ 1    │
│ 2         ┆ b     ┆ 2    │
│ 3         ┆ b     ┆ 3    │
└───────────┴───────┴──────┘
Я хочу улучшить решение, используя Polars.Expr.
Например, есть ли способ выполнить ту же операцию, используя такие выражения, как df.with_columns(pl.col(target_var).operationxx).

Подробнее здесь: https://stackoverflow.com/questions/789 ... tain-group
Ответить

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

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

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

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

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