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

如何将numpy的np.roll与Pandas的GroupBy结合实现DataFrame行循环移位

实现方案

你可以直接在groupby的apply/transform方法中调用np.roll实现分组内的循环移位,具体代码如下:

import pandas as pd
import numpy as np

# 方案1:apply实现
df['complete_contracts_shift'] = df.groupby(['contracts', 'param_contrct'])['complete_contracts']\
    .apply(lambda x: np.roll(x, shift=1))

# 方案2:transform实现,高版本Pandas下性能更优
df['complete_contracts_shift'] = df.groupby(['contracts', 'param_contrct'])['complete_contracts']\
    .transform(lambda x: np.roll(x, shift=1))

效果验证示例

假设你有如下测试数据:

contractsparam_contrctcomplete_contracts
AX1
AX2
AX3
BY4
BY5

执行上述代码后生成的complete_contracts_shift列结果如下,完全符合需求:

contractsparam_contrctcomplete_contractscomplete_contracts_shift
AX13
AX21
AX32
BY45
BY54

注意事项

  • 要确保分组内的行顺序和预期一致,np.roll是严格按照传入序列的顺序执行移位的,如果行顺序需要调整可以先在分组前执行sort_values排序
  • np.roll的shift参数设为正整数表示向右移位,设为负整数表示向左移位,可以根据自己的需求灵活调整

内容的提问来源于stack exchange,提问作者Alexis Olivero Aimaretti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:54:05