Цель состоит в том, чтобы найти наименьший индекс (i) столбца 2, где дата в столбце 1 меньше чем i-й элемент списка в каждой строке.
Код: Выделить всё
import polars as pl
from datetime import date
pl.Config(fmt_table_cell_list_len=10, fmt_str_lengths=80) # repr
df = pl.DataFrame({
'ref_date': [ date(2023, 9, 10), date(2023, 5, 15) ],
'date_list': [
[ date(2023, 1, 1), date(2023, 5, 1), date(2023, 12, 31) ],
[ date(2023, 4, 15), date(2023, 6, 18), date(2023, 12, 1) ]
]
})
df
Код: Выделить всё
shape(2, 2)
┌─────────────┬────────────────────────────────────────┐
│ ref_date ┆ date_list │
│ --- ┆ --- │
│ date ┆ list[date] │
╞═════════════╪════════════════════════════════════════╡
│ 2023-09-10 ┆ [2023-01-01, 2023-05-01, 2023-12-31] │
│ 2023-05-15 ┆ [2023-04-15, 2023-06-18, 2023-12-01] │
└─────────────┴────────────────────────────────────────┘
Код: Выделить всё
shape(2, 3)
┌─────────────┬────────────────────────────────────────┬──────┐
│ ref_date ┆ date_list ┆ i │
│ --- ┆ --- ┆ --- │
│ date ┆ list[date] ┆ u32 │
╞═════════════╪════════════════════════════════════════╪══════╡
│ 2023-09-10 ┆ [2023-01-01, 2023-05-01, 2023-12-31] ┆ 2 │
│ 2023-05-15 ┆ [2023-04-15, 2023-06-18, 2023-12-01] ┆ 1 │
└─────────────┴────────────────────────────────────────┴──────┘
Используя list.eval(), у меня есть решение, но оно не требует pl.col в качестве входных данных. По сути, ввод ref_date фиксирован (т. е. выражение pl.lit), аналогично решениям, предложенным для этого вопроса SO.
Другой подход, который работает, использует разнесение, но было бы неплохо увидеть решение на основе list.eval.
Подробнее здесь: https://stackoverflow.com/questions/772 ... hon-polars