我有带有列表元素的列 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 中有更好的方法吗?
您可以使用 .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 │
└─────┴───────────┴─────┘
现在的可行解决方案是(取自上面的示例):
df.with_columns(pl.col("b").list.len().alias("c"))