如何利用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
相关产品推荐
相关产品推荐

