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

如何在Pandas DataFrame中按双条件分组计算Profit_Or_Loss的YOY同比变化

问题原因

  • 第一版代码分组粒度过细:groupby(['Location','Year'])会将每个Location的每一年单独分为一组,每个分组仅包含1条数据,当前值除以自身自然得到全0结果。
  • 第二版代码没有做分组限制:全局调用pct_change()会跨Location计算,无法在Location变更时自动重置计算逻辑。

解决代码

# 导入pandas库
import pandas as pd
  
# 初始化嵌套列表数据
data = [[110,2020,'CHASE CENTER',53901,8904,44997,4], 
        [110,2019,'CHASE CENTER',57999,4921,53078,1], 
        [110,2018,'CHASE CENTER',91015,9945,81070,1], 
        [640,2020,'LAMBEAU WI',76214,5773,70441,3], 
        [619,2020,'SAL AIRPORT',93000,8278,84722,5]]

# 创建Pandas DataFrame
df = pd.DataFrame(data, columns = ['Location', 'Year', 'Location_Description', 'Revenue', 'Spend', 'Profit_Or_Loss', 'cluster_number'])

# 第一步:按Location升序、Year降序排序,保证同个地点的年份按从新到旧排列
df = df.sort_values(by=['Location', 'Year'], ascending=[True, False])

# 第二步:仅按Location分组,组内计算同比百分比变化
# periods=-1表示用当前行和下一行(即上一年的数据)做差值计算
df['YOY_Percent_Change'] = df.groupby('Location')['Profit_Or_Loss'].pct_change(periods=-1).mul(100).round(2)

print(df)

结果说明

运行代码后,每个Location最早的年份(分组最后一行)因为没有上年数据,同比字段会显示为空值,其他年份会得到正确的同比百分比结果,符合预期要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 20:15:04