我有一个 Polars DataFrame,其中每个 id 可以出现多次,并且具有不同的状态值(1 或 2)。我想计算有多少个唯一 id 只具有状态 1、只具有状态 2 或同时具有状态 1 和 2。
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:
• 仅状态 1(例如,只有 1 的 ID)
• 仅陈述 2(例如,只有 2 个的 ID)
• 状态 1 和 2(例如,同时具有 1 和 2 的 ID)
预期结果(示例):
State combination [1] -> 20 IDs
State combination [2] -> 15 IDs
State combination [1, 2] -> 30 IDs
您需要两个
group_by
s,第一个 s 将id
s 合并到状态中,另一个sgroup_by
用于统计状态的数量id
您可以按分组
id
并使用.all()
和.any()
检查状态。.sum()
布尔列是计数。为了将来参考,请提供正确的输出,而不仅仅是示例输出。
您可以执行分组,获取每个 ID 对应的唯一州,然后获取该州的值计数