如何统计NAME、B、C、D多列分组对应的数值总和及出现次数?
你需要的是按NAME、B两列分组统计出现次数,再将计数同步到同分组的每一行中,以下是三种常用场景的实现方案:
1 数据库(SQL)实现
如果使用支持窗口函数的数据库(MySQL8.0+、PostgreSQL、Hive等),直接用窗口统计即可:
SELECT NAME, B, C, D, TOTAL, COUNT(*) OVER (PARTITION BY NAME, B) AS COUNT FROM 你的业务表名;
PARTITION BY NAME, B会把NAME、B取值都相同的行归为同一组,COUNT(*)统计每组的行数,最终每行都会返回所属分组的总计数,和你要求的输出完全一致。
2 Excel 实现
假设你的数据表头在第1行,数据从第2行开始,NAME是A列、B是B列,需要填计数的COUNT列是F列:
在F2单元格输入公式:=COUNTIFS(A:A,A2,B:B,B2)
下拉填充所有数据行即可。公式会自动统计A列等于当前行A值、且B列等于当前行B值的总条数,就是你要的分组计数。
3 Python Pandas 实现
适合处理大批量数据的场景:
import pandas as pd # 读取你的数据源,可替换为read_csv等其他读取方法 df = pd.read_excel("你的数据文件路径.xlsx") # 按NAME、B分组统计数量,同步映射回原表 df['COUNT'] = df.groupby(['NAME', 'B'])['NAME'].transform('count') # 输出结果,需要保存的话可以调用to_excel/to_csv方法 print(df)
transform方法会保留原表的行顺序和所有列内容,仅新增COUNT列填充对应分组的计数,不会改动原数据结构。
内容的提问来源于stack exchange,提问作者Tshering Tashi
相关产品推荐
相关产品推荐

