Вычислите групповой остаток для кадра данных полярностейPython

Программы на Python
Ответить
Anonymous
 Вычислите групповой остаток для кадра данных полярностей

Сообщение Anonymous »

Я нахожусь в ситуации, когда у меня есть фрейм данных со значениями X и X, а также две группы GROUP1 и GROUP2. Просматривая обе группы, я хочу подогнать линейную модель к данным X и Y и вычесть соответствие из истинных данных, чтобы получить остаток.
В настоящее время я реализую это следующим образом:

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

import polars as pl
import numpy as np

# --- Sample DataFrame for demonstration purposes
df = pl.DataFrame(
{
"GROUP1": [1, 1, 1, 2, 2, 2],
"GROUP2": ["A", "A", "A", "B", "B", "B"],
"X": [0.0, 1.0, 2.0, 0.0, 1.0, 2.0],
"Y": [5.0, 7.0, 9.0, 3.0, 4.0, 6.0],
}
)

# --- Function to subtract linear best fit per group
def subtract_linear_best_fit(df: pl.DataFrame) -> pl.DataFrame:
result = []
for _, subdf in df.group_by(["GROUP1", "GROUP2"]):
x = subdf["X"].to_numpy()
y = subdf["Y"].to_numpy()

a, b = np.polyfit(x, y, 1)
residuals = y - (a * x + b)

result.append(subdf.with_columns(pl.Series("residual", residuals)))
return pl.concat(result)

# --- Apply function
df_with_residuals = subtract_linear_best_fit(df)
print(df_with_residuals)
Но это кажется неприятным, поскольку здесь не используются .group_by(...).agg(...) или .with_columns((...).over(...)).
Я попробовал оба этих подхода, но либо потерял столбцы из исходного фрейма данных, либо просто вычислил сводку. Но я хочу иметь фрейм данных той же высоты, но с еще одним столбцом.
Есть ли способ избежать объединения фреймов данных внутри цикла? В идеале это должно быть что-то вроде .group_by().pipe() или .pipe().over().

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

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

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

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

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

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