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

如何在Pandas DataFrame的每行中获取值对的计数与求和结果

高效实现按分组添加聚合列的解决方案

针对你需要为Pandas DataFrame添加sum_for_category和count_for_category列的需求,使用groupby+transform是最优且最高效的方案,完全适配大规模数据集(70万行不在话下),同时保留原DataFrame的所有行结构。

最优实现代码

import pandas as pd

# 你的原始DataFrame
df = pd.DataFrame({
    "name":["john","jim","eric","jim","john","jim","jim","eric","eric","john"],
    "category":["a","b","c","b","a","b","c","c","a","c"],
    "amount":[100,200,13,23,40,2,43,92,83,1]
})

# 添加sum_for_category列:按name+category分组后,对amount求和并广播到每一行
df["sum_for_category"] = df.groupby(["name", "category"])["amount"].transform("sum")

# 添加count_for_category列:按name+category分组后,统计记录数并广播到每一行
df["count_for_category"] = df.groupby(["name", "category"])["amount"].transform("count")

print(df)

输出结果(与你的期望完全一致)

name category  amount  sum_for_category  count_for_category
0   john        a     100               140                   2
1    jim        b     200               225                   3
2   eric        c      13               105                   2
3    jim        b      23               225                   3
4   john        a      40               140                   2
5    jim        b       2               225                   3
6    jim        c      43                43                   1
7   eric        c      92               105                   2
8   eric        a      83                83                   1
9   john        c       1                 1                   1

为什么这个方法比你的原实现高效?

你的原方案通过嵌套字典+apply逐行映射,存在两个核心问题:

  1. 逐行处理效率极低:apply是Python层面的逐行循环,对于70万行的数据集,运行时间会非常长;而groupby+transform是Pandas底层优化的矢量操作,基于C语言实现,速度提升几个数量级。
  2. 冗余计算:你手动遍历所有unique的name和category,提前计算所有组合的sum/count,这会产生不必要的计算(比如某些name+category组合可能不存在),而groupby只会处理实际存在的分组,更高效。

核心原理解释

  • groupby(["name", "category"]):将DataFrame按name和category的组合进行分组,每个组对应唯一的name+category配对。
  • transform("sum"):对每个分组的amount列求和,然后将结果广播回原DataFrame的每一行,保持原索引和行数不变,完美满足你"不分组聚合、保留原行数"的需求。
  • transform("count"):同理,统计每个分组的记录条数并广播到对应行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 17:52:33