получить предыдущее и следующее значение из фрейма данных и добавить новый столбец - PullRequest
0 голосов
/ 04 ноября 2019

Я новичок в питоне и пандах. Здесь у меня есть датафрейм, который выглядит как

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

Теперь в этом df у меня есть столбец функций. Я пытаюсь сделать некоторые операции в этом столбце. Этот столбец имеет несколько значений. Он также имеет значение 0. Теперь я хочу заменить это значение на основе предыдущих и следующих трех значений этого 0.

Если мы видим, первый 0, который имеет предыдущие значения, равен [2,2], поскольку это первое, так чтотретий не получится, а следующие три - [22,22,0].

Теперь я пытаюсь получить следующий фрейм данных

Ожидаемый результат

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

Итак, в этом я пытаюсь проверить, совпадают ли предыдущие и следующие значения или нет.

Есть ли способ получить этот кадр данных? Как получить предыдущее и следующее значения в этом кадре данных? любая помощь будет отличной. Спасибо

Итак, логика для получения newFeature такова. Здесь у меня есть список возможностей, который,

1, 2, 16,15,26,25
if the previous and next array has values like, (1,16,15) then it is the same as 1. and if it is from (2,26,25) then we can replace it with the 2.

Здесь, если

previous values are [1,16,2] and next are [1,26,1]  then in this as I said earlier (1,16,15) are 1 only .. so the number of 1 are more than 2 so, the 0 will get replaced by 1. and 26 will become 2 

, как это станет [1,1,2] и [1,2,1]

Итак, вот так. даже приведенные данные также мы можем использовать.

Ответы [ 2 ]

0 голосов
/ 04 ноября 2019

Вы можете использовать списки:

x = df['feature'].tolist()
y = x[::-1]
df['previous'] = [y[-i:][:3] for i in range(1, len(x)+1)]
df['Next'] = [x[i: i + 3] for i in range(1, len(x) + 1)]

df['previous'] = df['previous'].shift(1).where(df['feature'] == 0, '-')
df['Next'] = df['Next'].where(df['feature'] == 0, '-')
print (df)
    Offset  feature      previous          Next
0        0        2             -             -
1        5        2             -             -
2       11        0        [2, 2]   [22, 22, 0]
3       21       22             -             -
4       28       22             -             -
5       32        0   [22, 22, 0]  [21, 21, 21]
6       38       21             -             -
7       42       21             -             -
8       52       21             -             -
9       55        0  [21, 21, 21]     [0, 1, 1]
10      58        0   [0, 21, 21]     [1, 1, 1]
11      62        1             -             -
12      66        1             -             -
13      70        1             -             -
14      73        0     [1, 1, 1]        [1, 1]
15      78        1             -             -
16      79        1             -             -
0 голосов
/ 04 ноября 2019

Это должно привести вас в правильном направлении:

import pandas as pd
# create a dummy df
df = pd.DataFrame()
df['feature'] = range(100)
df = df.sample(frac=1)
# create shifted columns
df['shift1'] = df['feature'].shift()
df['shift2'] = df['feature'].shift(2)
# concat the previous values
values = df.loc[:, ['shift1', 'shift2']].values
df['prev'] = values.tolist()
# you just want the zeros, right?
df.query('feature == 0')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...