从datafram的一列中获取前三个值和后三个值

2024-04-24 20:12:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Python和熊猫还不熟悉。这里,我有一个数据帧,其中有两列。你知道吗

Offset       predictedFeature
 0              2
 5              2
 11             0
 21             22
 28             22
 32              0
 38             21
 42             21
 52             21
 55              0
 58              0
 62              1
 66              1
 70              1
 73              0
 78              1
 79              1

因此,在这个df中,我试图从值为0的列的predictedFeature列中获取前3个值。 例如,第三行的值是0,所以我试图得到前3个值,它们是[2000, 2000],后面3个是[2200, 2200, 0]。我正在为0列中的每一个predictedFeature尝试这个。所以我可以得到一个df,它将有两个新列:Previous和next值。你知道吗

Offset       feature       previous        Next            NewFeature 
 0              2             -             -                 2
 5              2             -             -                 2
 11             0           [2,2]          [22,22,0]          0
 21             22             -            -                 22
 28             22            -             -                 22
 32              0          [22,22,0]      [21,21,21]          0
 38             21            -              -                21 
 42             21            -              -                21
 52             21            -              -                21 
 55              0           [21,21,21]     [0,1,1]            0
 58              0           [0,21,21]      [1,1,1]            0   
 62              1             -              -                1
 66              1             -              -                1
 70              1             -              -                1
 73              0           [1,1,1]         [1,1]             1 
 78              1             -               -               1
 79              1             -               -               1

Tags: 数据dffeatureoffsetnextprevious个值newfeature
1条回答
网友
1楼 · 发布于 2024-04-24 20:12:49

可以通过^{}在数组上应用窗口视图。这是一个函数,我创建了一段时间前正是为了这个目的。理解起来有点棘手。从本质上讲,该函数只是修改内存步进或沿着新创建的轴移动,每一行显示前一行的移动版本。你知道吗

def windowed_view(x, window_size):
    """Create a 2d windowed view of a 1d array.

    `x` must be a 1d numpy array.

    `numpy.lib.stride_tricks.as_strided` is used to create the view.
    The data is not copied. You should never write to a windowed view.

    Example:

    >>> x = np.array([1, 2, 3, 4, 5, 6])
    >>> windowed_view(x, 3)
    array([[1, 2, 3],
            [2, 3, 4],
            [3, 4, 5],
            [4, 5, 6]])
    """
    assert window_size <= x.size, "window_size (%s) must be <= x.size (%s)" % (window_size, x.size)
    return np.lib.stride_tricks.as_strided(
        x,
        shape=(x.size - window_size + 1, window_size),
        strides=(x.strides[0], x.strides[0])
    )

df = pd.DataFrame({'predictedFeature': [2000,2000,0,2200,2200,0,2100,2100,2100,0,0,100,100,100,0,100,100]})
w = windowed_view(df.predictedFeature, 7)

[[2000 2000    0 2200 2200    0 2100]
 [2000    0 2200 2200    0 2100 2100]
 [   0 2200 2200    0 2100 2100 2100]
 [2200 2200    0 2100 2100 2100    0]
 [2200    0 2100 2100 2100    0    0]
 [   0 2100 2100 2100    0    0  100]
 [2100 2100 2100    0    0  100  100]
 [2100 2100    0    0  100  100  100]
 [2100    0    0  100  100  100    0]
 [   0    0  100  100  100    0  100]
 [   0  100  100  100    0  100  100]]

但是,您只需要0位于中间的行:

w[w[:,3]==0,:]

[[   0 2200 2200    0 2100 2100 2100]
 [2100 2100 2100    0    0  100  100]
 [2100 2100    0    0  100  100  100]]

唯一的问题是您分析的系列的开始和结束,因为视图只包含具有完整窗口的行。你少了一些零。但是,您可以遍历w的第一行和最后一行,并分别处理这些情况。希望到目前为止能有所帮助。你知道吗

相关问题 更多 >