Как динамически удалять строки из DataFrame Pandas - PullRequest
0 голосов
/ 17 января 2019

У меня есть следующие данные отслеживания НФЛ:

    Event  PlayId  FrameId   x-coord  y-coord
0   Start       1       1       20.2     20.0
1     NaN       1       2       21.0     19.1
2     NaN       1       3       21.3     18.3
3     NaN       1       4       22.0     17.5
4     End       1       5       22.5     17.2
4     NaN       1       6       22.5     17.2
4     NaN       1       7       22.5     17.2
4     NaN       1       8       22.5     17.2
4     NaN       1       9       22.5     17.2
4     NaN       1       10      22.5     17.2
5     NaN       2       1       23.0     16.9
6   Start       2       2       23.6     16.7
7     End       2       3       25.1     34.1
8     NaN       2       4       25.9     34.2
10    NaN       3       1       22.7     34.2
11    Nan       3       2       21.5     34.5
12    NaN       3       3       21.1     37.3
13  Start       3       4       21.2     44.3
14    NaN       3       5       20.4     44.6
15    End       3       6       21.9     42.7

Как я могу отфильтровать этот список, чтобы получить только строки между значениями «Начало» и «Конец» для столбца «Событие»? Чтобы уточнить, это данные, которые я хочу отфильтровать:

    Event  PlayId  FrameId   x-coord  y-coord
0   Start       1       1       20.2     20.0
1     NaN       1       2       21.0     19.1
2     NaN       1       3       21.3     18.3
3     NaN       1       4       22.0     17.5
4     End       1       5       22.5     17.2
6   Start       2       2       23.6     16.7
7     End       2       3       25.1     34.1
13  Start       3       4       21.2     44.3
14    NaN       3       5       20.4     44.6
15    End       3       6       21.9     42.7

Явное решение не будет работать, потому что фактический набор данных очень большой, и нет никакого способа предсказать, где значения Start и End падают.

1 Ответ

0 голосов
/ 17 января 2019

Делая с ломтиком и ffill затем concat назад, также у вас есть Nan в вашем df, это должно быть NaN?

df1=df.copy()

newdf=pd.concat([df1[df.Event.ffill()=='Start'],df1[df.Event=='End']]).sort_index()
newdf
    Event  PlayId  FrameId  x-coord  y-coord
0   Start       1        1     20.2     20.0
1     NaN       1        2     21.0     19.1
2     NaN       1        3     21.3     18.3
3     NaN       1        4     22.0     17.5
4     End       1        5     22.5     17.2
6   Start       2        2     23.6     16.7
7     End       2        3     25.1     34.1
13  Start       3        4     21.2     44.3
14    NaN       3        5     20.4     44.6
15    End       3        6     21.9     42.7

или

newdf=df[~((df.Event.ffill()=='End')&(df.Event.isna()))]
newdf
    Event  PlayId  FrameId  x-coord  y-coord
0   Start       1        1     20.2     20.0
1     NaN       1        2     21.0     19.1
2     NaN       1        3     21.3     18.3
3     NaN       1        4     22.0     17.5
4     End       1        5     22.5     17.2
6   Start       2        2     23.6     16.7
7     End       2        3     25.1     34.1
13  Start       3        4     21.2     44.3
14    NaN       3        5     20.4     44.6
15    End       3        6     21.9     42.7
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...