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

使用Pandas计算分组内各类型数据的占比

用Pandas实现分组计算占比的思路与代码实现

我来给你拆解下怎么用Pandas搞定这个需求,步骤很清晰:

  • 第一步:读取CSV数据
    先把你的CSV文件载入Pandas的DataFrame,假设文件名为crime_data.csv,用pd.read_csv()就能轻松搞定。

  • 第二步:计算分组内的总数量
    我们需要先拿到每个(Beat、Hour、Month)组合对应的COUNTER总和,这里用groupby配合transform是最优解——transform会把组级别的计算结果自动映射到每一行,这样每一行都能直接获取自己所在组的总数,不用额外做数据合并。

  • 第三步:计算占比并整理结果
    用每行的COUNTER数值除以所在组的总数,再乘以100就得到了该Primary Type在组内的占比,还可以按需保留小数位数让结果更规整。

具体代码实现

import pandas as pd

# 读取CSV数据到DataFrame
df = pd.read_csv("crime_data.csv")

# 计算每个分组的COUNTER总和,通过transform广播到每一行
df["group_total"] = df.groupby(["Beat", "Hour", "Month"])["COUNTER"].transform("sum")

# 计算占比,保留两位小数(可根据需求调整)
df["percentage"] = (df["COUNTER"] / df["group_total"] * 100).round(2)

# 整理出需要的结果列,也可以按需排序
result_df = df[["Beat", "Hour", "Month", "Primary Type", "COUNTER", "percentage"]]
print(result_df)

关键步骤解释

  • groupby(["Beat", "Hour", "Month"])["COUNTER"].transform("sum"):这一步会按指定的三列分组,计算每组的COUNTER总和,然后把这个总和赋值给组内的每一行。比如Beat=111、Hour=10AM、Month=Apr的组,所有行的group_total都会是22(12+5+1+4)。
  • (df["COUNTER"] / df["group_total"] * 100).round(2):直接用每行的COUNTER除以组总数得到占比,乘以100转成百分比格式,round(2)是保留两位小数,让结果更易读。

如果需要把结果导出成新的CSV文件,只需要执行result_df.to_csv("crime_with_percentage.csv", index=False)即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:43:32