import numpy as np import pandas as pd def build_features(df, window): df = df.copy() df["pdc1"] = df["vdc1"] * df["idc1"] df["vdc_mean"] = df["vdc1"].rolling(window).mean() df["vdc_std"] = df["vdc1"].rolling(window).std() df["pdc_mean"] = df["pdc1"].rolling(window).mean() df["pdc_std"] = df["pdc1"].rolling(window).std() df["pdc_delta"] = df["pdc1"].diff() df["pdc_slope"] = df["pdc1"].rolling(window).apply( lambda x: np.polyfit(range(len(x)), x, 1)[0], raw=False ) df["efficiency"] = df["pdc1"] / (df["vdc1"] * df["idc1"] + 1e-6) df["efficiency_norm"] = df["efficiency"] / df["efficiency"].rolling(window).mean() return df