Я пытаюсь найти наиболее элегантный способ в Polars найти в двух строках брекетинга (сначала сверху и снизу) конкретную цель. По сути, Min > 0 и Max < 0.
data = {
"strike": [5,10,15,20,25,30],
"target": [16] * 6,
}
df = (pl.DataFrame(data)
.with_columns(
diff = pl.col('strike') - pl.col('target')))
shape: (6, 3)
┌────────┬────────┬──────┐
│ strike ┆ target ┆ diff │
│ --- ┆ --- ┆ --- │
│ i64 ┆ i64 ┆ i64 │
╞════════╪════════╪══════╡
│ 5 ┆ 16 ┆ -11 │
│ 10 ┆ 16 ┆ -6 │
│ 15 ┆ 16 ┆ -1 │
│ 20 ┆ 16 ┆ 4 │
│ 25 ┆ 16 ┆ 9 │
│ 30 ┆ 16 ┆ 14 │
└────────┴────────┴──────┘
Это то, к чему я пытаюсь прийти.
shape: (2, 3)
┌────────┬────────┬──────┐
│ strike ┆ target ┆ diff │
│ --- ┆ --- ┆ --- │
│ i64 ┆ i64 ┆ i64 │
╞════════╪════════╪══════╡
│ 15 ┆ 16 ┆ -1 │
│ 20 ┆ 16 ┆ 4 │
└────────┴────────┴──────┘
Я могу сделать это с помощью двух отдельных операций фильтра, но я не могу связать их вместе и хотел бы избежать необходимости объединять два отдельных результата обратно в единые данные. если возможно, сделайте рамку.
df1 = (pl.DataFrame(data)
.with_columns(
diff = pl.col('strike') - pl.col('target'))
.filter((pl.col('diff') > 0)).min())
shape: (1, 3)
┌────────┬────────┬──────┐
│ strike ┆ target ┆ diff │
│ --- ┆ --- ┆ --- │
│ i64 ┆ i64 ┆ i64 │
╞════════╪════════╪══════╡
│ 20 ┆ 16 ┆ 4 │
└────────┴────────┴──────┘
df2 = (pl.DataFrame(data)
.with_columns(
diff = pl.col('strike') - pl.col('target'))
.filter((pl.col('diff') < 0)).max())
shape: (1, 3)
┌────────┬────────┬──────┐
│ strike ┆ target ┆ diff │
│ --- ┆ --- ┆ --- │
│ i64 ┆ i64 ┆ i64 │
╞════════╪════════╪══════╡
│ 15 ┆ 16 ┆ -1 │
└────────┴────────┴──────┘
Подробнее здесь: https://stackoverflow.com/questions/792 ... -in-polars
Вернуть две ближайшие строки выше и ниже целевого значения в Polars. ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение