получить только три предыдущих значения из кадра данных - PullRequest
1 голос
/ 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

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

SO, выводбыло бы похоже,

offset  Feature
11        2
21        22
28         22
// Here these three values are `of the 0 which is at 32 offset`

In the same dataframe for next place where is 0 

38        21
42        21 
52        21

58        0
62        1
66        1

есть ли способ, которым я могу получить это? Спасибо Это будет на основе документа ID.

Ответы [ 2 ]

1 голос
/ 04 ноября 2019

Вы можете взять 3 предыдущих строки вашего текущего 0 значения в столбце, используя loc .

По коду:

import pandas as pd
df = pd.read_csv("<path_of_the_file">)
zero_indexes = list(df[df['Feature'] == 0].index)
for each_zero_index in zero_indexes:
    df1 = df.loc[each_zero_index - 3: each_zero_index]
    print(df1) # This dataframe has 4 records. Your previous three including the zero record.

Выход:

   Offset  Feature
2      11        2
3      21       22
4      28       22
5      32        0
   Offset  Feature
6      38       21
7      42       21
8      52       21
9      55        0
    Offset  Feature
7       42       21
8       52       21
9       55        0
10      58        0
    Offset  Feature
11      62        1
12      66        1
13      70        1
14      73        0
1 голос
/ 04 ноября 2019

Даже я довольно новичок в пандах, но я попытался ответить на ваш вопрос. Я заполнил ваши данные как разделенные запятыми значения в data.csv, а затем использовал нарезку, чтобы получить предыдущие 3 столбца.

import pandas as pd

df = pd.read_csv('./data.csv')
for index in (df.loc[df['Feature'] == 0]).index:
    print(df.loc[index-3:index-1])

Вывод выглядит следующим образом. Крайний левый столбец - это индекс, который вы можете удалить, если не хотите. Это то, что вы искали?

   Offset  Feature
2      11        2
3      21       22
4      28       22
   Offset  Feature
6      38       21
7      42       21
8      52       21
   Offset  Feature
7      42       21
8      52       21
9      55        0
    Offset  Feature
11      62        1
12      66        1
13      70        1

Примечание: возможно, есть более питонский способ сделать это.

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