python 如何获取polars列表中元素的当前索引

ruarlubt  于 2024-01-05  发布在  Python
关注(0)|答案(3)|浏览(262)

当计算列表元素时,我想知道并使用当前索引。是否已经有一种方法可以做到?
比如pl.element().idx()

  1. import polars as pl
  2. data = {"a": [[1,2,3],[4,5,6]]}
  3. schema = {"a": pl.List(pl.Int8)}
  4. df = pl.DataFrame(data, schema=schema).with_columns([
  5. pl.col("a").list.eval(pl.element() * pl.element().idx() )
  6. ])

字符串
预期结果:

  1. +-------------+
  2. ¦ a ¦
  3. ¦ --- ¦
  4. ¦ list[u8] ¦
  5. ¦-------------¦
  6. ¦ [0, 2, 6] ¦
  7. ¦ [0, 5, 12] ¦
  8. +-------------+

waxmsbnn

waxmsbnn1#

您可以使用apply方法沿着使用enumerate函数来实现访问列表列中每个元素的当前索引的预期结果。下面是一个如何实现的示例:

  1. import polars as pl
  2. data = {"a": [[1,2,3],[4,5,6]]}
  3. schema = {"a": pl.List(pl.Int8)}
  4. df = pl.DataFrame(data, schema=schema).with_columns([
  5. pl.col("a").apply(lambda arr: [x * i for i, x in enumerate(arr)])
  6. ])
  7. print(df)

字符串
输出

  1. shape: (2, 1)
  2. ┌────────────┐
  3. a
  4. ---
  5. list[i64]
  6. ╞════════════╡
  7. [0, 2, 6]
  8. [0, 5, 12]
  9. └────────────┘

展开查看全部
ef1yzkbh

ef1yzkbh2#

使用pl.element().cum_count()可以很容易地访问列表中元素的索引,如下所示:

  1. df.with_columns(
  2. pl.col("a").list.eval(pl.element() * pl.element().cum_count())
  3. )

字符串

输出。

  1. shape: (2, 1)
  2. ┌────────────┐
  3. a
  4. ---
  5. list[i64]
  6. ╞════════════╡
  7. [0, 2, 6]
  8. [0, 5, 12]
  9. └────────────┘

展开查看全部
iibxawm4

iibxawm43#

最好的方法(据我所知)是创建一个行索引,爆炸,使用cumcount和一个窗口函数来创建idx(我称之为j),然后用groupby/agg把它放回一起

  1. (
  2. df
  3. .with_row_count('i')
  4. .explode('a')
  5. .with_columns(j=pl.first().cumcount().over('i'))
  6. .with_columns(new=pl.col('a')*pl.col('j'))
  7. .groupby('i', maintain_order=True)
  8. .agg(pl.col('new'))
  9. .drop('i')
  10. )

字符串

相关问题