Pandas DataFrame: сравнить предыдущие и следующие значения - PullRequest
0 голосов
/ 25 октября 2019

Я новичок в Питоне и Пандах и имею следующее DataFrame:

predictedFeature   offset
        2000         1
        2000         2
        0            4
        0            6
        2200          9
        2200        11
        2200         15
        2200       16
        2200         17
         0            19
         0           21  
         0            22
         0           26
         200        29
         200         31
          0          35
         200         56
         200        59
         200       71
         200        73
         100       75
         100       77
         160       79
         160       80
         100       83
           0       87
         100       89
           0       91

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

У меня уже есть массив, который похож на required [100,162,200,262,156,160,256].

Когда я получу ...

previous_array = [200,200,0]
next_array = [200,200,200] 

... Мне нужно проверить, не погас лиprevious_array имеет значения, которые находятся в моем массиве required.

Может кто-нибудь помочь мне с этим, пожалуйста?

например,

У меня есть датафрейм, как я упоминал выше.

Теперь, в этом есть места, где присутствует 0. Теперь я хочу заменить это 0 на значения из моего необходимого массива. Теперь,

Если мы увидим, что у меня 0 на 3-м месте в этом кадре данных. Теперь, если мы возьмем предыдущие 3 значения, тогда будет только два, поскольку само по себе это третье.

, поэтому это будет [2000, 2000], а следующее будет [0,2200,2200]

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

Теперь, если вы видите, что есть0, в котором предыдущие три -

[0,0,0] and next three are [200,200,0]

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

Я также добавил столбец смещения.

1 Ответ

0 голосов
/ 25 октября 2019

Другой метод заключается в использовании функции pandas.DataFrame.shift().

Эта функция позволяет создать новый столбец pF_n, который является смещением (смещением) столбца predictedFeature, сдвигая значения вверх или вниз на (n). Затем вы можете перебрать строки, используя df.iterrows(), чтобы выполнить прямое сравнение строк, чтобы получить предыдущие / следующие третьи значения из нулевой строки. Затем создайте массив из этих результатов.

Например:

import pandas as pd

vals = ['2000', '2000', '0', '0', '2200',
        '2200', '2200', '2200', '2200', '0',
        '0','0', '0', '200', '200', '0', '200',
        '200', '200', '200', '100', '100', '160',
         '160', '100', '0', '100', '0']

df = pd.DataFrame({'pF': vals})

# Shift to get the third **previous** value.
df['pF-3'] = df['pF'].shift(3)
# Shift to get the third **following** value.
df['pF3'] = df['pF'].shift(-3)

# Add values surrounding 0 to a list.
results = [row.values.tolist() for _, row in df.iterrows() if row['pF'] == 0]

Вывод:

      pF  pF-3   pF3
0   2000   NaN     0
1   2000   NaN  2200
2      0   NaN  2200
3      0  2000  2200
4   2200  2000  2200
5   2200     0  2200
6   2200     0     0
7   2200  2200     0
8   2200  2200     0
9      0  2200     0
10     0  2200   200
11     0  2200   200
12     0     0     0
13   200     0   200
14   200     0   200
15     0     0   200
...  ...   ...   ...

Массив значений, окружающих ноль:

[[0.0, nan, 2200.0],
 [0.0, 2000.0, 2200.0],
 [0.0, 2200.0, 0.0],
 [0.0, 2200.0, 200.0],
 [0.0, 2200.0, 200.0],
 [0.0, 0.0, 0.0],
 [0.0, 0.0, 200.0],
 [0.0, 160.0, nan],
 [0.0, 100.0, nan]]

Если в столбце pF-3 указано три предыдущих значения, а в столбце pF3 указано следующее третье значение.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...