小编Tho*_*eck的帖子

极坐标中列表列数据的索引操作

我正在使用 Python 的 Polars 0.13.46,并且有一列包含字符串列表,我需要检查特定字符串是否出现在另一个字符串之前。我创建了以下有效的代码示例,但需要使用 打破极坐标apply,这使得速度非常慢。

\n
import polars as pl\nfrom polars import col\n\ndf = pl.DataFrame(\n    {\n        \'str\': [\'A\', \'B\', \'C\', \'B\', \'A\'],\n        \'group\': [1,1,2,1,2]\n    }\n).lazy()\n\ndf_groups = df.groupby(\'group\').agg([col(\'str\').list().alias(\'str_list\')])\nprint(df_groups.collect())\n\npre = \'A\'\nsucc = \'B\'\n\ndf_groups_filtered = df_groups.filter(\n    col(\'str_list\').apply(\n        lambda str_list: \n            pre in str_list and succ in str_list and \n            str_list.to_list().index(pre) < str_list.to_list().index(succ)\n    )\n)\n\ndf_groups_filtered.collect()\n
Run Code Online (Sandbox Code Playgroud)\n

这提供了所需的结果,这只是示例数据的两行中的第一行:

\n
\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 group \xe2\x94\x86 str_list        \xe2\x94\x82\n\xe2\x94\x82 ---   \xe2\x94\x86 ---             \xe2\x94\x82\n\xe2\x94\x82 i64   \xe2\x94\x86 list[str]       \xe2\x94\x82\n\xe2\x95\x9e\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xaa\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa1\n\xe2\x94\x82 1     \xe2\x94\x86 ["A", "B", "B"] \xe2\x94\x82\n\xe2\x94\x9c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xbc\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xa4\n\xe2\x94\x82 2     \xe2\x94\x86 ["C", "A"]      \xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n …
Run Code Online (Sandbox Code Playgroud)

python-polars

6
推荐指数
2
解决办法
2568
查看次数

标签 统计

python-polars ×1