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

如何在Polars DataFrame中按ID统计唯一状态组合数量

Polars DataFrame按状态组合统计唯一ID数量

需求:针对包含重复ID和状态值(仅1或2)的Polars DataFrame,统计以下三类唯一ID的数量:

  • 仅出现状态1的ID
  • 仅出现状态2的ID
  • 同时出现状态1和2的ID

示例数据:

import polars as pl

df = pl.DataFrame({
    "id": [1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 9, 9, 10, 10, 10, 11, 11, 12, 12, 13, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19, 20, 20, 20],
    "state": [1, 2, 1, 1, 2, 2, 1, 2, 1, 1, 2, 2, 1, 1, 2, 1, 2, 1, 2, 2, 2, 2, 1, 1, 2, 2, 1, 2, 1, 2, 1, 1, 2, 2, 1, 1, 2, 2]
})

解决方案代码

# 按ID分组提取唯一状态,再按状态组合统计ID数量
result = (
    df
    .group_by("id")
    .agg(pl.col("state").unique().sort().alias("state_combination"))
    .group_by("state_combination")
    .agg(pl.count("id").alias("id_count"))
)

# 格式化输出结果
for row in result.iter_rows(named=True):
    comb = row["state_combination"]
    count = row["id_count"]
    print(f"状态组合 {comb}  -> {count} 个ID")

代码说明

  1. 按ID分组后,用unique().sort()提取每个ID对应的所有唯一状态并排序,避免同一组合出现不同顺序的格式(比如[1,2]和[2,1]被判定为不同组合)。
  2. 再按整理好的状态组合分组,统计每组对应的唯一ID总数。
  3. 最后遍历结果,按指定格式输出统计数据。

运行结果

状态组合 [1]  -> 5 个ID  
状态组合 [2]  -> 6 个ID  
状态组合 [1, 2]  -> 9 个ID  

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 08:55:02