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

使用Pandas的groupby或pivot找出2017-2018年销售冠军及对应水果类型

解决Pandas中找出两年销售额变化幅度最大的销售及对应水果问题

嘿,作为Pandas新手碰到这种跨年份对比的分组问题太正常啦!其实用你试过的groupby或者pivot就能轻松搞定,我给你一步步拆解开,保证好懂~

第一步:先明确数据结构(附示例数据)

首先假设你的销售数据大概是这样的(如果和你的实际结构有出入,调整列名就行):

import pandas as pd

# 构造示例销售数据集
data = {
    '销售人员': ['张三', '李四', '王五', '张三', '李四', '王五', '赵六'],
    '水果类型': ['苹果', '香蕉', '橙子', '苹果', '香蕉', '橙子', '草莓'],
    '年份': [2017, 2017, 2017, 2018, 2018, 2018, 2017],  # 赵六2018年没数据,模拟缺失情况
    '销售额': [12000, 9000, 15000, 18000, 16000, 13000, 8000]
}
df = pd.DataFrame(data)

第二步:筛选目标年份+重塑数据

先把2017和2018年的数据筛出来,避免其他年份干扰,然后用pivot_table把年份转成列,这样就能直接对比两年的销售额:

# 筛选2017-2018年的数据
filtered_df = df[df['年份'].isin([2017, 2018])]

# 用pivot_table重塑:以「销售人员+水果类型」为索引,年份为列,销售额为值
# 加fill_value=0是为了处理某年份缺失数据的情况(比如赵六2018年没销售)
pivot_df = filtered_df.pivot_table(
    index=['销售人员', '水果类型'],
    columns='年份',
    values='销售额',
    aggfunc='sum',  # 如果同个销售+水果+年份有多条记录,用sum合并
    fill_value=0
)

第三步:计算销售额变化幅度

接下来计算两年的销售额变化值和变化幅度(增长率),这里分两种情况:

  • 绝对值变化:直接用2018年销售额减2017年,适合看“卖多/卖少了多少钱”
  • 相对变化幅度(增长率):适合看“销售额涨/跌了百分之多少”
# 计算绝对值变化
pivot_df['销售额变化值'] = pivot_df[2018] - pivot_df[2017]

# 计算相对变化幅度(百分比),避免除以0的情况可以加个判断
pivot_df['销售额变化幅度(%)'] = pivot_df.apply(
    lambda row: (row[2018] - row[2017]) / row[2017] * 100 if row[2017] != 0 else 0,
    axis=1
)

第四步:找出变化幅度最大的记录

现在直接找变化幅度最大的那条就行,这里以绝对值变化最大为例(如果要找增长率最大,把abs().idxmax()里的列换成销售额变化幅度(%)就行):

# 找出销售额变化值绝对值最大的记录
max_change_record = pivot_df.loc[pivot_df['销售额变化值'].abs().idxmax()]

print("两年间销售额变化幅度最大的记录:")
print(max_change_record)

用groupby的替代方案

如果你更倾向用groupby,其实原理和pivot差不多,只是用unstack把年份转成列:

# groupby+unstack实现同样的重塑效果
grouped_df = filtered_df.groupby(['销售人员', '水果类型', '年份'])['销售额'].sum().unstack('年份', fill_value=0)
# 后面计算变化幅度和找最大值的步骤和上面完全一致

小提醒

  • 如果你的数据里有缺失值(比如某个销售某一年没有数据),一定要用fill_value=0或者fillna(0)处理,不然计算变化值会得到NaN
  • 记得确认“变化幅度最大”是指绝对值变化还是相对增长率,根据需求调整对应的列就行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:58:48