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

Pandas DataFrame分组后区分有效无效计数并拆分为多列的实现方法

实现方案

你可以通过两种常用路径实现需求,可根据你当前的代码进度选择:

方案1:基于你已生成的df2直接处理

如果已经生成了包含id1、id2、Count的df2,可直接加标记列后做分组聚合转宽:

# 先定义无效id2的常量
INVALID_ID2 = "00000000-0000-0000-0000-000000000000"

# 新增列标记当前计数属于有效还是无效
df2["count_type"] = df2["id2"].apply(lambda x: "InvalidCount" if x == INVALID_ID2 else "ValidCount")

# 按id1和计数类型分组求和后转宽表,空值补0
result = df2.groupby(["id1", "count_type"])["Count"].sum().unstack(fill_value=0).reset_index()

# 调整列顺序匹配预期输出
result = result[["id1", "ValidCount", "InvalidCount"]]
print(result)

方案2:直接从原始df一步生成结果,性能更优

如果还没生成df2,建议直接从原始df处理,减少一次分组操作:

import pandas as pd

INVALID_ID2 = "00000000-0000-0000-0000-000000000000"

# 先给原始df加是否有效的标记列
df["is_valid"] = df["id2"] != INVALID_ID2

# 按id1分组直接聚合两个统计值
result = df.groupby("id1").agg(
    ValidCount = ("is_valid", "sum"),
    InvalidCount = ("is_valid", lambda x: (~x).sum())
).reset_index()

print(result)

两种方案输出都和你给出的预期样例完全一致。如果存在某个id1下只有有效/只有无效计数的场景,fill_value=0会自动把缺失的统计值补为0,不会出现空值异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 04:06:03