将字符串拆分为多个“单词”后,我想添加一个新列,其中包含计数项目的数量
.alias("count")
。
let df = df! [
"keys" => ["a ab", "a ab abc", "b ba abc abcd", "b ba bbc abcd bbcd"],
"groups" => ["A", "A", "B", "C"],
]?;
首先我分割字符串:
let out = df.lazy().with_column(col("keys").str().split(lit(" ")));
并尝试计数:
let out_2 = out.with_columns([col("keys")
.apply(|s| Ok(s.len()), GetOutput::from_type(DataType::Int32))
.alias("count")]).collect().unwrap();
这会导致错误消息:
mismatched types
expected struct `polars::prelude::Series`, found `usize`
不知道如何继续。
.list()
方法获取 ListNameSpace
,它提供 len
。
let out_2 = out
.with_columns([col("keys").list().len().alias("count")])
.collect()
.unwrap();
┌─────────────────────────┬────────┬───────┐
│ keys ┆ groups ┆ count │
│ --- ┆ --- ┆ --- │
│ list[str] ┆ str ┆ u32 │
╞═════════════════════════╪════════╪═══════╡
│ ["a", "ab"] ┆ A ┆ 2 │
│ ["a", "ab", "abc"] ┆ A ┆ 3 │
│ ["b", "ba", ... "abcd"] ┆ B ┆ 4 │
│ ["b", "ba", ... "bbcd"] ┆ C ┆ 5 │
└─────────────────────────┴────────┴───────┘