自从询问了this个之后,我开始考虑使用两极来处理我的数据.From the docs for map_rows,一般来说,有很多关于使用Python函数而不是他们自己的表达系统的警告,因为它的速度要慢得多.是否有可能使用polars表达来查找字形行中的连续序列?

一个额外的问题是,我现有的ADF(来自上一个问题)上的@njitdecorator 是否对Polars map_rows的运行有任何影响.如果相关,我目前使用polars Array类型而不是List(但如果需要,我可以更改).

编辑 :

我的收件箱(CSV格式)的形状如下:

Myname,"1,2,3,4,5,5,5,5",AnotherName

中间数组的长度是固定的,但我不一定知道步进有多长(本例中是4长).

如前所述,我目前正在使用我之前的问题和一个ADF,我将其应用于许多行,旨在过滤它们.

推荐答案

听起来你有:

df = pl.read_csv(b"""
name,array,other
a,"1,2,3,4,5,5,5,5",e
b,"1,2,3,4,6,6,6",f
c,"1,2,2,2,2,3,4,6,6,6",g
d,"1,1,1,1,1",h
""").with_columns(
   array = pl.format("[{}]", "array").str.json_decode()
).with_row_index()
shape: (4, 4)
┌───────┬──────┬────────────────────────────────┬───────┐
│ index ┆ name ┆ array                          ┆ other │
│ ---   ┆ ---  ┆ ---                            ┆ ---   │
│ u32   ┆ str  ┆ list[i64]                      ┆ str   │
╞═══════╪══════╪════════════════════════════════╪═══════╡
│ 0     ┆ a    ┆ [1, 2, 3, 4, 5, 5, 5, 5]       ┆ e     │
│ 1     ┆ b    ┆ [1, 2, 3, 4, 6, 6, 6]          ┆ f     │
│ 2     ┆ c    ┆ [1, 2, 2, 2, 2, 3, 4, 6, 6, 6] ┆ g     │
│ 3     ┆ d    ┆ [1, 1, 1, 1, 1]                ┆ h     │
└───────┴──────┴────────────────────────────────┴───────┘

您想要测试array列中是否存在任何Run-length encoding = N.

Polars有rlerle_id个表情:.rle()

.flatten() + .over("index")是"模拟"基于行的列表操作的一种方法.

df.with_columns(
   pl.col("array").flatten().rle().struct["lengths"].max().over("index")
     .alias("rle_max_len")
)
shape: (4, 5)
┌───────┬──────┬────────────────────────────────┬───────┬─────────────┐
│ index ┆ name ┆ array                          ┆ other ┆ rle_max_len │
│ ---   ┆ ---  ┆ ---                            ┆ ---   ┆ ---         │
│ u32   ┆ str  ┆ list[i64]                      ┆ str   ┆ i32         │
╞═══════╪══════╪════════════════════════════════╪═══════╪═════════════╡
│ 0     ┆ a    ┆ [1, 2, 3, 4, 5, 5, 5, 5]       ┆ e     ┆ 4           │
│ 1     ┆ b    ┆ [1, 2, 3, 4, 6, 6, 6]          ┆ f     ┆ 3           │
│ 2     ┆ c    ┆ [1, 2, 2, 2, 2, 3, 4, 6, 6, 6] ┆ g     ┆ 4           │
│ 3     ┆ d    ┆ [1, 1, 1, 1, 1]                ┆ h     ┆ 5           │
└───────┴──────┴────────────────────────────────┴───────┴─────────────┘

本质上与做的事情是一样的:

(df.group_by("index")
   .agg(
      pl.all().first(),
      rle_max_len = pl.col("array").flatten().rle().struct["lengths"].max()
   )
)

如果您不需要长度,如果需要,可以直接传递到.filter().

df.filter(
   pl.col("array").flatten().rle().struct["lengths"].max().over("index") > 3
)
shape: (3, 4)
┌───────┬──────┬────────────────────────────────┬───────┐
│ index ┆ name ┆ array                          ┆ other │
│ ---   ┆ ---  ┆ ---                            ┆ ---   │
│ u32   ┆ str  ┆ list[i64]                      ┆ str   │
╞═══════╪══════╪════════════════════════════════╪═══════╡
│ 0     ┆ a    ┆ [1, 2, 3, 4, 5, 5, 5, 5]       ┆ e     │
│ 2     ┆ c    ┆ [1, 2, 2, 2, 2, 3, 4, 6, 6, 6] ┆ g     │
│ 3     ┆ d    ┆ [1, 1, 1, 1, 1]                ┆ h     │
└───────┴──────┴────────────────────────────────┴───────┘

Python相关问答推荐

从不规则形状区域返回使用openCV跟踪的对象的着陆位置

跳过包含某些键的字典

单击Cookie横幅错误并在Selenium中启用搜索栏

从收件箱获取特定列中的重复行

Pandas read_jsonfuture 警告:解析字符串时,to_datetime与单位的行为已被反对

如何处理必须存在于环境中但无法安装的Python项目依赖项?

Tkinter -控制调色板的位置

Pydantic:如何将对象列表表示为dict(将列表序列化为dict)

从DataFrame.apply创建DataFrame

将HLS纳入媒体包

Locust请求中的Python和参数

如何在msgraph.GraphServiceClient上进行身份验证?

Pandas实际上如何对基于自定义的索引(integer和非integer)执行索引

Odoo 14 hr. emergency.public内的二进制字段

如何使用html从excel中提取条件格式规则列表?

如何访问所有文件,例如环境变量

基于索引值的Pandas DataFrame条件填充

为什么np. exp(1000)给出溢出警告,而np. exp(—100000)没有给出下溢警告?

在pandas数据框中计算相对体积比指标,并添加指标值作为新列

在Python中计算连续天数