You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Polars中创建交叉表?验证列唯一组合统计写法

Polars统计两列唯一组合数量的实现

你的Polars写法能得到正确的计数结果,但输出结构和R的table()、Pandas的pd.crosstab()不一致。如果想要和R/Pandas对齐的行是a、列是b的交叉表,或者更简洁地统计唯一组合数量,可以参考以下实现方式:

方法1:调整pivot参数匹配R/Pandas输出结构

通过交换index和on的参数,得到和R、Pandas示例一致的交叉表格式:

import polars as pl

df = pl.DataFrame(
    {
        "a": [2,0,1,0,0,0],
        "b": [1,1,1,0,0,1]
    }
)
df.pivot(on="b", index="a", values="b", aggregate_function="len").fill_null(0)

输出结果:

shape: (3, 3)
┌─────┬─────┬─────┐
│ a   ┆ 0   ┆ 1   │
│ --- ┆ --- ┆ --- │
│ i64 ┆ u32 ┆ u32 │
╞═════╪═════╪═════╡
│ 2   ┆ 0   ┆ 1   │
│ 0   ┆ 2   ┆ 2   │
│ 1   ┆ 0   ┆ 1   │
└─────┴─────┴─────┘

方法2:直接分组统计唯一组合(更直观)

如果仅需要统计两列的唯一组合及其对应数量,不需要交叉表格式,使用groupby+count的方式更直接清晰:

df.group_by(["a", "b"], maintain_order=True).count()

输出结果:

shape: (4, 3)
┌─────┬─────┬───────┐
│ a   ┆ b   ┆ count │
│ --- ┆ --- ┆ ---   │
│ i64 ┆ i64 ┆ u32   │
╞═════╪═════╪═══════╡
│ 2   ┆ 1   ┆ 1     │
│ 0   ┆ 1   ┆ 2     │
│ 1   ┆ 1   ┆ 1     │
│ 0   ┆ 0   ┆ 2     │
└─────┴─────┴───────┘

你的原代码逻辑是正确的,只是行列维度与R/Pandas的示例相反,调整参数后即可得到一致的交叉表;若不需要交叉表形式,分组统计的方式更贴合“统计唯一组合数量”的核心需求。

内容的提问来源于stack exchange,提问作者Esben Eickhardt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 21:40:39