Code: Select all
import polars as pl
df = pl.DataFrame(
{'id':['1']*3 + ['2']*3,
'actions': [0,1,2, 0, 1, 2],
'campaign_name': [None,None, '2', '1', '2', None] ,
'event_time': [1,2,3,0,1,2],
'session_id':['session_1']*6}
)
Code: Select all
┌─────┬─────────┬───────────────┬────────────┬────────────┐
│ id ┆ actions ┆ campaign_name ┆ event_time ┆ session_id │
│ --- ┆ --- ┆ --- ┆ --- ┆ --- │
│ str ┆ i64 ┆ str ┆ i64 ┆ str │
╞═════╪═════════╪═══════════════╪════════════╪════════════╡
│ 1 ┆ 0 ┆ null ┆ 1 ┆ session_1 │
│ 1 ┆ 1 ┆ null ┆ 2 ┆ session_1 │
│ 1 ┆ 2 ┆ 2 ┆ 3 ┆ session_1 │
│ 2 ┆ 0 ┆ 1 ┆ 0 ┆ session_1 │
│ 2 ┆ 1 ┆ 2 ┆ 1 ┆ session_1 │
│ 2 ┆ 2 ┆ null ┆ 2 ┆ session_1 │
└─────┴─────────┴───────────────┴────────────┴────────────┘
Hier ist mein Code.
Code: Select all
df.with_columns(
pl.when(pl.col('campaign_name').is_in(['1','2']))
.then(
pl.col('actions').min().over('session_id', 'id').alias('min_action')
),
pl.when(pl.col('campaign_name').is_in(['1','2']))
.then(
pl.col('actions').max().over('session_id', 'id').alias('max_action')
)
)
Code: Select all
shape: (6, 7)
┌─────┬─────────┬───────────────┬────────────┬────────────┬────────────┬────────────┐
│ id ┆ actions ┆ campaign_name ┆ event_time ┆ session_id ┆ min_action ┆ max_action │
│ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- │
│ str ┆ i64 ┆ str ┆ i64 ┆ str ┆ i64 ┆ i64 │
╞═════╪═════════╪═══════════════╪════════════╪════════════╪════════════╪════════════╡
│ 1 ┆ 0 ┆ null ┆ 1 ┆ session_1 ┆ null ┆ null │
│ 1 ┆ 1 ┆ null ┆ 2 ┆ session_1 ┆ null ┆ null │
│ 1 ┆ 2 ┆ 2 ┆ 3 ┆ session_1 ┆ 0 ┆ 2 │
│ 2 ┆ 0 ┆ 1 ┆ 0 ┆ session_1 ┆ 0 ┆ 2 │
│ 2 ┆ 1 ┆ 2 ┆ 1 ┆ session_1 ┆ 0 ┆ 2 │
│ 2 ┆ 2 ┆ null ┆ 2 ┆ session_1 ┆ null ┆ null │
└─────┴─────────┴───────────────┴────────────┴────────────┴────────────┴────────────┘
Der Code berechnet die Min/Max-Werte für alle Werte und nicht für die durch die Bedingung gefilterten Werte.
Erwartete Ergebnisse:
Code: Select all
shape: (6, 7)
┌─────┬─────────┬───────────────┬────────────┬────────────┬────────────┬────────────┐
│ id ┆ actions ┆ campaign_name ┆ event_time ┆ session_id ┆ min_action ┆ max_action │
│ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- │
│ str ┆ i64 ┆ str ┆ i64 ┆ str ┆ i64 ┆ i64 │
╞═════╪═════════╪═══════════════╪════════════╪════════════╪════════════╪════════════╡
│ 1 ┆ 0 ┆ null ┆ 1 ┆ session_1 ┆ 2 ┆ 2 │
│ 1 ┆ 1 ┆ null ┆ 2 ┆ session_1 ┆ 2 ┆ 2 │
│ 1 ┆ 2 ┆ 2 ┆ 3 ┆ session_1 ┆ 2 ┆ 2 │
│ 2 ┆ 0 ┆ 1 ┆ 0 ┆ session_1 ┆ 0 ┆ 1 │
│ 2 ┆ 1 ┆ 2 ┆ 1 ┆ session_1 ┆ 0 ┆ 1 │
│ 2 ┆ 2 ┆ null ┆ 2 ┆ session_1 ┆ 0 ┆ 1 │
└─────┴─────────┴───────────────┴────────────┴────────────┴────────────┴────────────┘
Mobile version