Pandas如何用min、max函数按月份分组统计各销售列最值
Pandas按月分组批量计算多列最值实现方案
不需要逐列单独计算min、max后再拼接,Pandas原生的分组聚合接口可以一次性完成所有列的最值计算,代码简洁且运行效率更高。
具体实现流程
- 首先导入依赖、构造和你描述一致的示例销售数据(实际使用时替换成你自己的数据源即可)
import pandas as pd # 示例数据:Month为月份列,其余三列为对应品类销量,1-3月各2条记录 sales_df = pd.DataFrame({ 'Month': [1, 1, 2, 2, 3, 3], 'T-shirt Sales': [120, 98, 156, 172, 201, 188], 'Hat Sales': [45, 52, 67, 59, 78, 83], 'short Sales': [89, 76, 132, 145, 198, 176] })
- 核心逻辑:按月份分组后,直接传入要计算的统计函数列表,所有选中的销售列会自动批量计算最值,无需逐列处理
# 按Month分组,对三个销售列同时计算最小值、最大值 summary_df = sales_df.groupby('Month')[['T-shirt Sales', 'Hat Sales', 'short Sales']].agg(['min', 'max'])
- 可选优化:默认输出是多层列索引,如果想要扁平化的普通列名方便后续使用,加一行处理即可
# 拍平多层列名,格式为「品类名_统计值」,比如T-shirt Sales_min summary_df.columns = [f'{col}_{stat}' for col, stat in summary_df.columns] summary_df = summary_df.reset_index()
补充说明
你提到的「获取唯一月份值列表」需求不需要额外提前处理,groupby操作本身会自动对分组列去重后按唯一值聚合。如果确实需要单独提取唯一月份列表,直接执行sales_df['Month'].unique().tolist()即可拿到结果。
这种实现方式比逐列计算后再拼接DataFrame的写法代码量少60%以上,且是Pandas优化过的原生向量化计算,运行速度远快于逐列循环+拼接的写法,也不会出现索引对齐错误的问题。
内容的提问来源于stack exchange,提问作者PythonBeginner
相关产品推荐
相关产品推荐

