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

