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

如何在Pandas DataFrame中按类别计算利润的一阶差分与百分比变化?

按地区分组计算利润差分与百分比变化的解决方案

核心思路是先按地区分组,再在每个组内单独计算利润的一阶差分和百分比变化,避免全局计算的问题。

步骤示例

假设你的DataFrame包含Region(地区)、Year(年份)、Profit(利润)三列,先模拟一份示例数据:

import pandas as pd

data = {
    'Region': ['Delhi', 'Delhi', 'Delhi', 'Kolkata', 'Kolkata', 'Kolkata'],
    'Year': [2020, 2021, 2022, 2020, 2021, 2022],
    'Profit': [1000, 1200, 1500, 800, 960, 1152]
}
df = pd.DataFrame(data)

分组计算差分与百分比变化

直接通过groupby()指定地区分组,再对利润列应用对应方法:

# 计算各地区利润的一阶差分(当年-上年)
df['Profit_Diff'] = df.groupby('Region')['Profit'].diff()

# 计算各地区利润的百分比变化((当年-上年)/上年 * 100),保留两位小数
df['Profit_Pct_Change'] = df.groupby('Region')['Profit'].pct_change().round(2) * 100

关键说明

  • groupby('Region')会将数据拆分为Delhi和Kolkata两个独立子组,所有计算都在组内进行
  • diff()自动计算组内相邻行的差值,对应2021-2020、2022-2021的利润差
  • pct_change()计算组内相邻行的相对变化,转成百分比格式更直观

结果展示

执行后DataFrame会新增两列,结果如下:

Region  Year  Profit  Profit_Diff  Profit_Pct_Change
0    Delhi  2020    1000          NaN                NaN
1    Delhi  2021    1200        200.0               20.0
2    Delhi  2022    1500        300.0               25.0
3  Kolkata  2020     800          NaN                NaN
4  Kolkata  2021     960        160.0               20.0
5  Kolkata  2022    1152        192.0               20.0

额外注意

如果你的原始数据中年份未按顺序排列,需要先按地区和年份排序,确保计算的是连续年份的变化:

df = df.sort_values(by=['Region', 'Year']).reset_index(drop=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 17:52:43