Индексная операция над данными столбца списка в полярахPython

Программы на Python
Anonymous
Индексная операция над данными столбца списка в полярах

Сообщение Anonymous »

У меня есть столбец со списком строк, для которого мне нужно проверить, встречается ли определенная строка перед другой.

Код: Выделить всё

import polars as pl

df = pl.LazyFrame(
{
'str': ['A', 'B', 'C', 'B', 'A'],
'group': [1,1,2,1,2]
}
)

df_groups = df.group_by('group').agg(pl.col('str').alias('str_list'))
print(df_groups.collect())

Код: Выделить всё

shape: (2, 2)
┌───────┬─────────────────┐
│ group ┆ str_list        │
│ ---   ┆ ---             │
│ i64   ┆ list[str]       │
╞═══════╪═════════════════╡
│ 1     ┆ ["A", "B", "B"] │
│ 2     ┆ ["C", "A"]      │
└───────┴─────────────────┘
Я создал следующий пример кода, который работает, но ему нужно выйти из полярности с помощью map_elements, что делает его очень медленным.

Код: Выделить всё

pre = 'A'
succ = 'B'

df_groups_filtered = df_groups.filter(
pl.col('str_list').map_elements(
lambda str_list:
pre in str_list and succ in str_list and
str_list.to_list().index(pre) < str_list.to_list().index(succ)
)
)

df_groups_filtered.collect()
Это обеспечивает желаемый результат:

Код: Выделить всё

shape: (1, 2)
┌───────┬─────────────────┐
│ group ┆ str_list        │
│ ---   ┆ ---             │
│ i64   ┆ list[str]       │
╞═══════╪═════════════════╡
│ 1     ┆ ["A", "B", "B"] │
└───────┴─────────────────┘
Я знаю, что смогу

Код: Выделить всё

df_groups_filtered = df_groups.filter(
pl.col('str_list').list.contains(pre) & col('str_list').list.contains(succ)
)
для проверки наличия обеих строк, но я не мог понять, как проверить порядок в чистых полярах.
Есть ли способы добиться этого с помощью поляров?>

Подробнее здесь: https://stackoverflow.com/questions/726 ... -in-polars

Вернуться в «Python»