极坐标计数列表列中的元素

问题描述 投票:0回答:2

我有带有列表元素的列 b 的数据框,我需要创建列 c 来计算列表中每行的元素数量。这是 Pandas 中的玩具示例:

import pandas as pd

df = pd.DataFrame({'a': [1,2,3], 'b':[[1,2,3], [2], [5,0]]})

    a   b
0   1   [1, 2, 3]
1   2   [2]
2   3   [5, 0]

df.assign(c=df['b'].str.len())

    a   b           c
0   1   [1, 2, 3]   3
1   2   [2]         1
2   3   [5, 0]      2

这是我在 Polars 中的等效项:

import polars as pl

dfp = pl.DataFrame({'a': [1,2,3], 'b':[[1,2,3], [2], [5,0]]})

dfp.with_columns(pl.col('b').map_elements(lambda x: len(x)).alias('c'))

我有一种感觉

.map_elements(lambda x: len(x))
不是最佳的。

在 Polars 中有更好的方法吗?

python python-polars
2个回答
11
投票

您可以使用 .list.len()

df.with_columns(c = pl.col("b").list.len())
shape: (3, 3)
┌─────┬───────────┬─────┐
│ a   ┆ b         ┆ c   │
│ --- ┆ ---       ┆ --- │
│ i64 ┆ list[i64] ┆ u32 │
╞═════╪═══════════╪═════╡
│ 1   ┆ [1, 2, 3] ┆ 3   │
│ 2   ┆ [2]       ┆ 1   │
│ 3   ┆ [5, 0]    ┆ 2   │
└─────┴───────────┴─────┘

3
投票

现在的可行解决方案是(取自上面的示例):

df.with_columns(pl.col("b").list.len().alias("c"))
© www.soinside.com 2019 - 2024. All rights reserved.