Мне нужно найти первое ненулевое значение в столбце над сгруппированным pl.DataFrame
.
import polars as pl
df = pl.DataFrame(
{
"symbol": ["s1", "s1", "s2", "s2"],
"trade": [None, 1, -1, None],
}
)
shape: (4, 2)
┌────────┬───────┐
│ symbol ┆ trade │
│ --- ┆ --- │
│ str ┆ i64 │
╞════════╪═══════╡
│ s1 ┆ null │
│ s1 ┆ 1 │
│ s2 ┆ -1 │
│ s2 ┆ null │
└────────┴───────┘
Как я могу получить номера строк/значения индексов первого ненулевого значения в столбцах trade
, пока group_by symbol
?
На самом деле я ищу номера строк/индексов 1
и 0
. Возможно, результат может быть примерно таким:
shape: (2, 2)
┌────────┬────────────────┐
│ symbol ┆ first-non-null │
│ --- ┆ --- │
│ str ┆ i64 │
╞════════╪════════════════╡
│ s1 ┆ 1 │
│ s2 ┆ 0 │
└────────┴────────────────┘
На самом деле я ищу эквивалент pd.first_valid_index()
🤔 А знаете ли вы, что...
Python был создан Гвидо ван Россумом и впервые выпущен в 1991 году.
Вот один из способов использования .arg_true().first()
:
print(
df.group_by("symbol").agg(
pl.col("trade").is_not_null().arg_true().first().alias("first-non-null")
)
)
Выход:
┌────────┬────────────────┐
│ symbol ┆ first-non-null │
│ --- ┆ --- │
│ str ┆ u32 │
╞════════╪════════════════╡
│ s1 ┆ 1 │
│ s2 ┆ 0 │
└────────┴────────────────┘
(df.group_by("symbol")
.agg(pl.col.trade.is_not_null().arg_max())
)
shape: (2, 2)
┌────────┬───────┐
│ symbol ┆ trade │
│ --- ┆ --- │
│ str ┆ u32 │
╞════════╪═══════╡
│ s2 ┆ 0 │
│ s1 ┆ 1 │
└────────┴───────┘