Как получить строки последнего появления полосы в столбце панд? - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть такой фрейм данных

df1 = pd.DataFrame({'x':[0,1,2,3,4,5,6,7,8,9],'y':['a','a','b','c','b','b','a','b','c','c']})

Как мы можем вернуть фрейм данных, подобный следующему

df2 = pd.DataFrame({'x':[1,2,3,5,6,7,9],'y':['a','b','c','b','a','b','c']})

enter image description here

Есть ли эффективный способ использования операций со столбцами вместо циклического прохождения каждой строки?

Ответы [ 2 ]

3 голосов
/ 27 сентября 2019

Вам нужно каждый раз находить значение, отличное от следующего, поэтому достаточно сравнить его со следующим:

mask = df1['y'].ne(df1['y'].shift(-1))
df2 = df1[mask].reset_index(drop=True)
print(df2)

Выход

   x  y
0  1  a
1  2  b
2  3  c
3  5  b
4  6  a
5  7  b
6  9  c
2 голосов
/ 27 сентября 2019

Классическое приложение cumsum для поиска последовательных блоков:

df1.groupby(df1['y'].ne(df1['y'].shift()).cumsum(), as_index=False).last()

Вывод:

   x  y
0  1  a
1  2  b
2  3  c
3  5  b
4  6  a
5  7  b
6  9  c
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...