You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何利用Pandas透视表获取各年份销售额最高的月份

如何获取各年份销售额最高对应的月份?

嘿,我来帮你解决这个问题!你已经算出了各年份的最高销售额,现在要拿到对应的月份,其实有几种简洁的实现方式,我给你详细说明:

方法一:直接在透视表上使用idxmax()

你已经用pivot_table生成了各年月的销售总和表,而idxmax()方法正好可以帮你找到每一列(年份)最大值对应的行索引(月份),完美匹配你的需求:

# 先生成透视表,再获取每个年份最高销售额的月份
max_month_per_year = df.pivot_table(index='Month', columns='Year', aggfunc='sum').idxmax()
print(max_month_per_year)

运行后输出结果就是:

Year
2020    Feb
2021    Feb
2022    Feb
Name: Sale ($), dtype: object

解释:idxmax()会针对每一列(也就是每个年份),返回该列最大值所在的行标签(也就是月份),直接得到你想要的对应关系。

方法二:先分组聚合再筛选(更灵活)

如果你希望保留更多元的信息(比如同时看到最高销售额的数值,或者处理多个月份并列最高的情况),可以先按年份和月份分组计算总和,再筛选出每个年份的最大值对应的行:

# 第一步:计算每个年月的销售总和
monthly_sales = df.groupby(['Year', 'Month'])['Sale ($)'].sum().reset_index()

# 第二步:筛选出每个年份销售额最高的月份
max_month_result = monthly_sales.loc[
    monthly_sales.groupby('Year')['Sale ($)'].idxmax(),
    ['Year', 'Month']
]
print(max_month_result)

运行后输出的DataFrame结果:

Year Month
3  2020   Feb
7  2021   Feb
11 2022   Feb

拓展:处理多个月份并列最高的情况

如果某个年份有多个月份销售额相同且都是最高值,上面的idxmax()只会返回第一个出现的月份。要是想把所有并列的月份都找出来,可以用transform方法:

# 获取所有年份中销售额等于该年份最大值的行
all_max_months = monthly_sales[
    monthly_sales['Sale ($)'] == monthly_sales.groupby('Year')['Sale ($)'].transform('max')
]
print(all_max_months)

这样如果有并列情况,所有符合条件的年月都会被保留下来。


内容的提问来源于stack exchange,提问作者Changoleon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 21:22:42