我的知识记录

Python Excel分组统计求和count mean

用pandas groupby对Excel分组聚合,按部门/地区/产品统计求和、计数、平均值、最大值,一行代码替代Excel分类汇总。

Python Excel分组统计求和count

场景痛点

一份订单明细,要按部门统计总金额、订单数、客单价;按产品看销量排名。Excel里用分类汇总或者透视表,每次数据更新都得重做。用pandas的 groupby 写好规则,一键刷新。

用到的库

pip install pandas openpyxl

完整代码

import pandas as pd

def groupby_demo(input_file, output_file):
df = pd.read_excel(input_file)

# 1. 单字段分组:按部门汇总
g1 = df.groupby("部门").agg(
总金额=("金额", "sum"),
订单数=("订单号", "count"),
平均金额=("金额", "mean"),
最大单笔=("金额", "max")
).reset_index()

# 2. 多字段分组:部门 × 产品
g2 = df.groupby(["部门", "产品"]).agg(
总销量=("数量", "sum"),
总金额=("金额", "sum")
).reset_index()

# 3. 不同列用不同聚合函数
g3 = df.groupby("地区").agg({
"金额": ["sum", "mean", "count"],
"数量": "sum"
}).reset_index()

# 4. 分组后排序
g4 = g1.sort_values(by="总金额", ascending=False)

with pd.ExcelWriter(output_file, engine="openpyxl") as writer:
g1.to_excel(writer, sheet_name="按部门", index=False)
g2.to_excel(writer, sheet_name="部门×产品", index=False)
g3.to_excel(writer, sheet_name="多指标", index=False)
g4.to_excel(writer, sheet_name="部门金额排序", index=False)

print("分组统计完成")
print(g4)

if __name__ == "__main__":
groupby_demo("./销售明细.xlsx", "./分组统计结果.xlsx")

代码讲解

  • groupby("部门") 按部门分组,.agg() 一次指定多个聚合指标。
  • 命名聚合写法 新列名=(原列, 聚合函数),输出列名直接是中文,不用事后再改。
  • 聚合函数:sum 求和、count 计数(非空)、mean 平均、max 最大、min 最小、median 中位数。
  • reset_index() 把分组键从索引变回普通列,导出Excel时好看。
  • 多列分组 groupby(["部门","产品"]) 形成层级汇总。

运行结果

生成 分组统计结果.xlsx,4个sheet对应不同维度的汇总,控制台打印按部门排序后的结果。

注意事项

  • count 数的是非空单元格,要数总行数用 size
  • 分组键有空值会单独成一组,先 fillna("未填写") 补上更友好。
  • 金额列如果是字符串(带逗号带货币符号),先 df["金额"] = df["金额"].str.replace(",","").astype(float) 转数值。

Python Excel分组统计求和count mean

标签:

更新时间:2026-09-15 09:06:57

上一篇:Python Excel 隐藏与显示行列 openpyxl 方法

下一篇:Python Excel设置冻结窗格:冻结表头行和首列