rust Polars将列表[str]系列中已计数的项目添加到列中

5sxhfpxr  于 2023-03-12  发布在  其他
关注(0)|答案(1)|浏览(167)

在将字符串拆分为多个“words”之后,我想添加一个新列,其中包含计数项的数量.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(" "));

并尝试计数:

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`

不知道该怎么办。

kcwpcxri

kcwpcxri1#

您可以使用.arr()方法获取ListNameSpace,它提供lengths

let out_2 = out
        .with_columns([col("keys").arr().lengths().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     │
└─────────────────────────┴────────┴───────┘

相关问题