Я пытаюсь найти наиболее элегантный способ в 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
Программы на Python
1732830648
Anonymous
Я пытаюсь найти наиболее элегантный способ в 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 │
└────────┴────────┴──────┘
Подробнее здесь: [url]https://stackoverflow.com/questions/79231593/return-two-closest-rows-above-and-below-a-target-value-in-polars[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия