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

如何使用pandas df.shift实现循环移位,用首尾元素填补空缺?

实现Pandas DataFrame的循环移位(循环滚动)

问题描述

现有如下5行2列的Pandas DataFrame:

import pandas as pd

df = pd.DataFrame({
    'A': [10, 20, 30, 40, 50],
    'B': [0, 5, 10, 15, 20]
})

原始数据展示:

A   B
0  10   0
1  20   5
2  30  10
3  40  15
4  50  20

需要实现两种循环移位效果:

  • 对A列执行向下2行的移位,顶部空缺用原本会被移出底部的2个元素填充
  • 对B列执行向上2行的移位,底部空缺用原本会被移出顶部的2个元素填充

使用普通的df["A"].shift(2)和df["B"].shift(-2)会产生NaN值,不符合需求,预期的最终结果为:

A   B
0  40  10
1  50  15
2  10  20
3  20   0
4  30   5

解决方案

可以借助numpy.roll()函数实现循环移位,该函数会将数组元素进行循环滚动,自动用移出的元素填充空缺位置:

import pandas as pd
import numpy as np

# 创建原始DataFrame
df = pd.DataFrame({
    'A': [10, 20, 30, 40, 50],
    'B': [0, 5, 10, 15, 20]
})

# A列向下循环移2行:将末尾2个元素移到开头
df['A'] = np.roll(df['A'], shift=2)
# B列向上循环移2行:将开头2个元素移到末尾
df['B'] = np.roll(df['B'], shift=-2)

print(df)

代码说明

  • np.roll(arr, shift=n):当n为正数时,将数组arr的最后n个元素移动到数组开头,对应DataFrame列的向下循环移位;
  • 当n为负数时,将数组arr的开头|n|个元素移动到数组末尾,对应DataFrame列的向上循环移位;
  • 该方法不会产生NaN值,完美实现循环填充的移位效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 10:07:42