TLDR.将打印机取消旋转为长格式后可以使用value_counts
.
df.melt().get_column("value").value_counts()
解释
让我们考虑下面的例子,即 pyramid .
import polars as pl
df = pl.DataFrame({
"col_1": [1, 2, 3],
"col_2": [2, 3, 7],
"col_3": [1, 1, 9],
})
shape: (3, 3)
┌───────┬───────┬───────┐
│ col_1 ┆ col_2 ┆ col_3 │
│ --- ┆ --- ┆ --- │
│ i64 ┆ i64 ┆ i64 │
╞═══════╪═══════╪═══════╡
│ 1 ┆ 2 ┆ 1 │
│ 2 ┆ 3 ┆ 1 │
│ 3 ┆ 7 ┆ 9 │
└───────┴───────┴───────┘
首先,我们可以使用pl.DataFrame.melt
来取消透视框架,以获得包含所有值的单个列.
df.melt()
shape: (9, 2)
┌──────────┬───────┐
│ variable ┆ value │
│ --- ┆ --- │
│ str ┆ i64 │
╞══════════╪═══════╡
│ col_1 ┆ 1 │
│ col_1 ┆ 2 │
│ col_1 ┆ 3 │
│ col_2 ┆ 2 │
│ col_2 ┆ 3 │
│ col_2 ┆ 7 │
│ col_3 ┆ 1 │
│ col_3 ┆ 1 │
│ col_3 ┆ 9 │
└──────────┴───────┘
最后,我们可以将value列作为pl.Series
,并使用pl.Series.value_counts
来计算每个值的出现次数.
counts = df.melt().get_column("value").value_counts()
shape: (5, 2)
┌───────┬───────┐
│ value ┆ count │
│ --- ┆ --- │
│ i64 ┆ u32 │
╞═══════╪═══════╡
│ 7 ┆ 1 │
│ 3 ┆ 2 │
│ 9 ┆ 1 │
│ 2 ┆ 2 │
│ 1 ┆ 3 │
└───────┴───────┘
这也可以简单地转换为Python字典.
dict(counts.iter_rows())
{3: 2, 7: 1, 1: 3, 2: 2, 9: 1}