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

Python Pandas如何计算分组内逐行的百分比变化

问题解答

Pandas 中和 SQL 里 LAG 功能对等的函数是 shift(),可以通过指定偏移量来获取当前行的上/下N行同列值,偏移量为正代表向上取前N行,偏移量为负代表向下取后N行。

你已经完成了数据排序,后续实现代码如下:

import pandas as pd

# 示例数据构造+排序(你原有代码)
data = {'retailer': [2, 2, 2, 2, 2, 5, 5, 5, 5, 5],
        'store': [1, 1, 1, 1, 1, 7, 7, 7, 7, 7],
        'week':[2021110701, 2021101301, 2021100601, 2021092901, 2021092201, 2021110701, 2021101301, 2021100601, 2021092901, 2021092201],
        'dollars': [353136.2, 379263.8, 507892.1, 491528.2, 503602.8, 435025.2, 406698.5, 338383.5, 360845.1, 372385.2]
       }
data = pd.DataFrame(data)
data = data.sort_values(['retailer', 'store', 'week'], ascending=(True, True, False))

# 按分组计算百分比差异
data['pc_diff'] = data.groupby(['retailer', 'store'])['dollars'].apply(
    lambda x: (x - x.shift(-1)) / x.shift(-1)
)

# 将pc_diff列移动到dollars列旁边
dollar_pos = data.columns.get_loc('dollars')
col_list = data.columns.tolist()
col_list.insert(dollar_pos + 1, col_list.pop(col_list.index('pc_diff')))
data = data[col_list]

运行后得到的结果和你给出的预期输出完全一致,每组最后一行没有下一行数据时会自动返回NaN。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:06:07