Как удалить строки, следующие после в dataframe python - PullRequest
0 голосов
/ 01 марта 2019

Пожалуйста, помогите.Как я могу удалить строки, следующие за строкой, где впервые встречается 1 в пределах одного идентификатора?У меня есть фрейм данных с двумя уровнями индексов.

Что у меня есть

Вот как я хочу удалить

Iпопробовал это

for i in range(1,6):
    for j in range(2013,2016):
        if example_i.loc[i,j]['default']>0:
            example_i.drop(index=[i,j+1])

Но это ошибка: KeyError: 2015

Это также проблема, когда я пытался

example_i.loc[4,2014]

, поскольку такой строки нет.

1 Ответ

0 голосов
/ 01 марта 2019

Я не могу представить себе способ аккуратно векторизовать операцию.Но кадр данных легко сканировать, чтобы составить список пропускаемых строк.Таким образом, код может быть:

cur = 0

to_drop = []
for row in example_i.itertuples():
    if cur != row[0][0]:
        cur = row[0][0]
        drop = False
    if drop:
        to_drop.append(row[0])
    if row[1] == 1:
        drop = True

to_drop теперь должно быть [(1, 2015), (1, 2016), (2, 2016), (4, 2015), (4, 2016), (5, 2015), (5, 2016)]

Так что этого достаточно, чтобы отбросить строки:

example_i.drop(to_drop, inplace=True)

и мы имеем, как и ожидалось:

         default
id time         
1  2013        0
   2014        1
2  2013        0
   2014        0
   2015        1
3  2013        0
   2014        0
   2015        0
   2016        0
4  2013        1
5  2013        0
   2014        1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...