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

Pandas按分类列分组统计另一列特定值的出现次数与占比

问题原因

你当前使用的df.groupby("Categories")["Clicks"].count()统计的是每个分类下Clicks列的非空值总数量,也就是该分类的总观测数,没有做Clicks==1的条件筛选,所以不符合需求。


实现代码

你可以通过分组聚合一次性计算两个所需指标,两种常用实现方式如下:

方式1:单步聚合(更简洁)

利用布尔值的数值特性:True等价于1,False等价于0,直接对Clicks==1的布尔序列求和得到计数,求均值得到概率:

import pandas as pd

# 你的原始df读取后执行以下代码
result = df.groupby("Categories").agg(
    # 统计Clicks==1的次数
    Clicks_count = ("Clicks", lambda x: (x == 1).sum()),
    # 计算概率并格式化为百分比
    Clicks_prob = ("Clicks", lambda x: f"{round((x == 1).mean() * 100)}%")
).reset_index()

方式2:先加标记列再聚合(可读性更高)

import pandas as pd

# 新增是否为点击1的标记列
df["is_click_one"] = df["Clicks"] == 1

# 分组计算
result = df.groupby("Categories").agg(
    Clicks_count = ("is_click_one", "sum"),
    Clicks_prob = ("is_click_one", lambda x: f"{round(x.mean() * 100)}%")
).reset_index()

两种方式输出的result都和你需要的目标格式完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:06:03