Polars 添加列,其中包含列表 [str] 系列中的计数项目

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

将字符串拆分为多个“单词”后,我想添加一个新列,其中包含计数项目的数量

.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`

不知道如何继续。

rust counting rust-polars
1个回答
2
投票

您可以使用

.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     │
└─────────────────────────┴────────┴───────┘
© www.soinside.com 2019 - 2024. All rights reserved.