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

如何在PySpark中统计重复值的出现次数及Total列求和?

实现DataFrame分组统计次数与求和的方法

嘿,这个需求用Pandas的groupby配合聚合操作就能轻松搞定,我给你两种常用的实现方式,都能得到你想要的dd2:

方法一:一步式分组聚合(推荐)

这种方式最简洁高效,直接通过agg()同时指定多个聚合规则:

import pandas as pd

# 先构造你的原始DataFrame dd1(如果已经存在就跳过这步)
dd1 = pd.DataFrame({
    'colA': ['A', 'A', 'B', 'B', 'B', 'C', 'D'],
    'colB': ['A', 'A', 'B', 'B', 'B', 'C', 'D'],
    'Total': [12, 1, 45, 0, 5, 1, 12]
})

# 分组并执行聚合操作
dd2 = dd1.groupby(['colA', 'colB']).agg(
    count=('Total', 'size'),  # 统计每个分组的行数,命名为count
    Total=('Total', 'sum')    # 对每个分组的Total列求和,保留原列名
).reset_index()

# 查看结果
print(dd2)

关键说明:

  • groupby(['colA', 'colB']):指定按colA和colB两列进行分组,确保相同组合的行被归为一组
  • agg():接收一个字典,键是新列名,值是(原列名,聚合函数)的元组
    • size:统计分组内的行数(即使有NaN也会被计入,适合单纯统计出现次数)
    • sum:对分组内的Total值求和
  • reset_index():把分组用的colA、colB从索引变回普通列,和你期望的输出结构完全匹配

方法二:分步统计后合并

如果你需要分步处理统计逻辑,可以分开计算次数和求和,再合并结果:

# 统计每个分组的出现次数
count_df = dd1.groupby(['colA', 'colB']).size().reset_index(name='count')

# 统计每个分组的Total求和
sum_df = dd1.groupby(['colA', 'colB'])['Total'].sum().reset_index()

# 合并两个结果集
dd2 = pd.merge(count_df, sum_df, on=['colA', 'colB'])

最终输出结果

两种方法运行后都会得到你想要的dd2:

colA colB  count  Total
0    A    A      2     13
1    B    B      3     50
2    C    C      1      1
3    D    D      1     12

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:46:46