Polars Python: интерполяция в контексте группировкиPython

Программы на Python
Ответить
Anonymous
 Polars Python: интерполяция в контексте группировки

Сообщение Anonymous »

В полярном Python у меня есть файл данных с 3 столбцами x: целые числа (по модулю 5 непрерывных целых чисел с пропущенными значениями), y: целые числа и z: str (категория).
Я хочу сгруппировать по столбцу z и интерполировать столбцы x и y. Вот пример фрейма данных:

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

┌─────┬─────┬─────┐
│ x   ┆ y   ┆ z   │
│ --- ┆ --- ┆ --- │
│ i64 ┆ i64 ┆ str │
╞═════╪═════╪═════╡
│ 5   ┆ 1   ┆ A   │
│ 10  ┆ 2   ┆ A   │
│ 20  ┆ 4   ┆ A   │
│ 25  ┆ 5   ┆ A   │
│ 10  ┆ 2   ┆ B   │
│ 20  ┆ 4   ┆ B   │
│ 30  ┆ 6   ┆ B   │
└─────┴─────┴─────┘
И вот желаемый результат:

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

┌─────┬─────┬─────┐
│ x   ┆ y   ┆ z   │
│ --- ┆ --- ┆ --- │
│ i64 ┆ i64 ┆ str │
╞═════╪═════╪═════╡
│ 5   ┆ 1   ┆ A   │
│ 10  ┆ 2   ┆ A   │
│ 15  ┆ 3   ┆ A   │
│ 20  ┆ 4   ┆ A   │
│ 25  ┆ 5   ┆ A   │
│ 10  ┆ 2   ┆ B   │
│ 15  ┆ 3   ┆ B   │
│ 20  ┆ 4   ┆ B   │
│ 25  ┆ 5   ┆ B   │
│ 30  ┆ 6   ┆ B   │
└─────┴─────┴─────┘
шагов между каждым значением x (для каждой категории) всегда должно быть 5. Мой реальный фрейм данных очень большой, поэтому я хотел бы работать с pl.LazyFrame вместо pl.DataFrame
Без столбца категории z Я решил проблему с помощью соединения:

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

import polars as pl

#  Main dataframe
data = dict(x=[10, 20, 30], y=[2, 4, 6])
df = pl.DataFrame(data)

# Dataframe with all x values
step = 5
df_1 = pl.DataFrame(dict(x=range(df["x"].min(), df["x"].max() + step, step)))

#  merging and interpolation
print((
df_1
.join(df, on="x", how="left")
.with_columns(pl.col("y").interpolate())
))
и результат был:

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

┌─────┬─────┐
│ x   ┆ y   │
│ --- ┆ --- │
│ i64 ┆ i64 │
╞═════╪═════╡
│ 10  ┆ 2   │
│ 15  ┆ 3   │
│ 20  ┆ 4   │
│ 25  ┆ 5   │
│ 30  ┆ 6   │
└─────┴─────┘
Это работает так, как и ожидалось, но я не могу понять, как это применить в контексте group_by

Подробнее здесь: https://stackoverflow.com/questions/775 ... by-context
Ответить

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

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

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

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

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