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

