如何在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
相关产品推荐
相关产品推荐

