Python实现类似SQL循环字段生成分组汇总表方法求教
Python实现指定字段的分组汇总+总计功能
你要实现的操作在Pandas里叫做分组聚合+追加总计行,对应你熟悉的SQL循环字段分组查询+union all总计的逻辑。下面直接给你针对这个DataFrame的实现代码和说明:
首先先确认你的DataFrame构造代码(方便复现):
import pandas as pd data = { 'COL1': ['aaa', 'aaa', 'aaa', 'aaa', 'bbb'], 'COL2': ['a1234', 'a2345', 'a3456', 'a5678', 'a5678'], 'COL3': ['b1234', 'b2345', 'b3456', 'b5678', 'b5678'], 'COL4': [5, 10, 15, 20, 25] } df = pd.DataFrame(data)
接下来是核心实现代码:
# 定义要循环的字段列表,和你SQL里的写法一致 fields = ['COL2', 'COL3'] # 循环每个目标字段 for field in fields: print(f"===== 针对{field}的分组汇总结果 =====") # 1. 按COL1和当前字段分组,对COL4求和 grouped = df.groupby(['COL1', field], as_index=False)['COL4'].sum() # 2. 计算总计行:COL1为'总计',当前字段为'所有',COL4取总和 total_row = pd.DataFrame({ 'COL1': ['总计'], field: ['所有'], 'COL4': [df['COL4'].sum()] }) # 3. 合并分组结果和总计行 result = pd.concat([grouped, total_row], ignore_index=True) print(result) print("\n")
代码说明:
groupby(['COL1', field], as_index=False):对应SQL里的GROUP BY COL1, 目标字段,as_index=False保证分组后的字段不会变成索引,保持列格式['COL4'].sum():对应SQL里的SUM(COL4),你可以根据需求改成其他聚合函数(比如mean()取平均、count()计数)pd.concat([grouped, total_row]):对应SQL里把分组结果和总计行用UNION ALL合并的逻辑- 循环
fields列表:和你SQL里循环字段执行查询的逻辑完全对应
运行后你会得到每个字段的分组汇总+总计结果,比如针对COL2的输出是:
===== 针对COL2的分组汇总结果 ===== COL1 COL2 COL4 0 aaa a1234 5 1 aaa a2345 10 2 aaa a3456 15 3 aaa a5678 20 4 bbb a5678 25 5 总计 所有 75
如果你的聚合需求不是求和,只需要把.sum()改成对应的聚合方法即可,非常灵活。
内容的提问来源于stack exchange,提问作者Rav86
相关产品推荐
相关产品推荐

