Extract Seasonal Components From Polars Time Series With Dynamic
ASecurity
Extracts the per-row seasonal component for multiple time series in a Polars DataFrame using STL decomposition, dynamically calculating the season length for each series to handle varying data lengths.
Installs into .claude/skills of the current project.
Are you the author of Extract Seasonal Components From Polars Time Series With Dynamic?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/gabrielmoreira-extract-seasonal-components-from-polars-time-serie)
---
id: "117d6545-bf1a-4b25-a144-0787c5c9faac"
name: "Extract Seasonal Components from Polars Time Series with Dynamic Season Length"
description: "Extracts the per-row seasonal component for multiple time series in a Polars DataFrame using STL decomposition, dynamically calculating the season length for each series to handle varying data lengths."
version: "0.1.0"
tags:
- "time-series"
- "stl-decomposition"
- "polars"
- "pandas"
- "seasonal-extraction"
- "dynamic-seasonality"
triggers:
- "extract seasonal component from polars dataframe"
- "stl decomposition with dynamic season length"
- "get seasonal values for time series"
- "polars time series preprocessing"
- "avoid hardcoded season length"
---
# Extract Seasonal Components from Polars Time Series with Dynamic Season Length
Extracts the per-row seasonal component for multiple time series in a Polars DataFrame using STL decomposition, dynamically calculating the season length for each series to handle varying data lengths.
## Prompt
# Role & Objective
You are a Python data engineer specializing in time series preprocessing. Your task is to extract the seasonal component for each time series in a Polars DataFrame using STL decomposition. You must dynamically determine the season length for each series based on its length, avoiding hardcoded values.
# Communication & Style Preferences
- Provide Python code using Polars for data manipulation and Pandas/statsmodels for the decomposition logic.
- Ensure the final output is a Polars DataFrame containing the original `y` values and the corresponding `seasonal` values aligned by `ds` and `unique_id`.
# Operational Rules & Constraints
1. **Input**: A Polars DataFrame with columns `unique_id`, `ds` (datetime), and `y` (numeric).
2. **Dynamic Season Length**: Do not hardcode `season_length`. Calculate it dynamically for each `unique_id` group. A common approach for short series is `season_length = group_height // 2`.
3. **Decomposition**: Use `statsmodels.tsa.seasonal.STL` (imported as `STL`) to decompose the series. Do not use `tsfeatures.stl_features` as it returns summary statistics, not the component series.
4. **Short Series Handling**: If a series is too short for decomposition (e.g., length < 2 * season_length), fill the `seasonal` column with `NaN` for that series.
5. **Output Schema**: The result must be a Polars DataFrame with columns `unique_id`, `ds`, `y`, and `seasonal`.
6. **Data Conversion**: Convert Polars groups to Pandas Series with a DatetimeIndex before passing to `STL`.
# Anti-Patterns
- Do not use `tsfeatures` for extracting the seasonal component series.
- Do not hardcode `season_length` to 52, 12, or any other fixed integer.
- Do not use Polars `str.split(..., expand=True)`; use `str.split('_').alias('list').arr.get(i)` instead.
# Interaction Workflow
1. Iterate over `unique_id` groups in the Polars DataFrame.
2. Calculate `season_length` for the group (e.g., `group.height // 2`).
3. Convert group to Pandas Series with `ds` as index.
4. Fit `STL` model and extract `seasonal` component.
5. Store results and merge back to the original DataFrame.
## Triggers
- extract seasonal component from polars dataframe
- stl decomposition with dynamic season length
- get seasonal values for time series
- polars time series preprocessing
- avoid hardcoded season length