繁体   English   中英

如何找到极坐标系列中最频繁值(模式)的频率?

[英]How to find the frequency of the most frequent value (mode) of a series in polars?

import polars as pl

df = pl.DataFrame({
    "tags": ["a", "a", "a", "b", "c", "c", "c", "c", "d"] 
})

这是使用.mode表达式计算列中最频繁的元素的方法:

df.select([
    pl.col("tags").mode().alias("mode"),
])

我怎样才能显示该模式的频率/计数?

有一个value_counts表达式。 此表达式将返回Struct数据类型,其中第一个字段是唯一值,第二个字段是该值的计数。

df.select([
    pl.col("tags").value_counts()
])
shape: (4, 1)
┌───────────┐
│ tags      │
│ ---       │
│ struct[2] │
╞═══════════╡
│ {"c",4}   │
├╌╌╌╌╌╌╌╌╌╌╌┤
│ {"a",3}   │
├╌╌╌╌╌╌╌╌╌╌╌┤
│ {"b",1}   │
├╌╌╌╌╌╌╌╌╌╌╌┤
│ {"d",1}   │
└───────────┘

或者,如果您想将该结果作为DataFrame

(df.select([
    pl.col("tags").value_counts()
]).to_series().struct.to_frame())
shape: (4, 2)
┌──────┬────────┐
│ tags ┆ counts │
│ ---  ┆ ---    │
│ str  ┆ u32    │
╞══════╪════════╡
│ c    ┆ 4      │
├╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┤
│ a    ┆ 3      │
├╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┤
│ d    ┆ 1      │
├╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┤
│ b    ┆ 1      │
└──────┴────────┘

编辑:这可以更简单:

df["tags"].value_counts()

我找到了这种方法,但我不确定是否有更好的方法:

df.select([
    pl.col("tags").mode().alias("mode"),
    pl.col("tags").filter(pl.col("tags") == pl.col("tags").mode()).count().alias("count")
])

输出:

shape: (1, 2)
┌──────┬───────┐
│ mode ┆ count │
│ ---  ┆ ---   │
│ str  ┆ u32   │
╞══════╪═══════╡
│ c    ┆ 4     │
└──────┴───────┘

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM