Рекомендуется удалить несколько строк после того, как определенное значение встречается в строках раньше? - PullRequest
2 голосов
/ 08 февраля 2020

Мои данные выглядят так:

   Journey ID  Visit ID      Date  Conversion
0           1         1  20200101           1
1           1         2  20200102           1
2           1         3  20200103           0
3           2         4  20200104           0
4           2         5  20200105           1
5           3         6  20200106           1
6           3         7  20200107           0

Моя цель состоит в том, чтобы удалить все строки, которые появляются после преобразования в идентификаторе поездки . Неважно, что содержимое строк после строки с преобразованием. В этом примере должны быть удалены строки с индексами 1,2 и 6.

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

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

Вы можете воспроизвести набор данных примера с помощью этого:

d = {'Journey ID': [1,1,1,2,2,3,3],
     'Visit ID': [1,2,3,4,5,6,7],
     'Date': [20200101,20200102,20200103, 20200104, 20200105,20200106,20200107],
     'Conversion': [1,1,0,0,1,1,0]}
data = pd.DataFrame(data = d)

1 Ответ

2 голосов
/ 08 февраля 2020

IIU C, вы можете попробовать с cumsum с groupby:

out = data[data['Conversion'] == data.groupby('Journey ID')['Conversion'].cumsum()]

   Journey ID  Visit ID  Date+Time  Conversion
0           1         1  date_time           1
3           2         4  date_time           0
4           2         5  date_time           1
5           3         6  date_time           1

Вот логика c визуализируется:

   Journey ID  Visit ID      Date  Conversion  cumsum_Journey  delete
0           1         1  20200101           1               1   False
1           1         2  20200102           1               2    True
2           1         3  20200103           0               2    True
3           2         4  20200104           0               0   False
4           2         5  20200105           1               1   False
5           3         6  20200106           1               1   False
6           3         7  20200107           0               1    True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...