pandas soltam duplicatas consecutivas seletivamente

4
TwinPenguins 2020-01-23 08:27.

Estive olhando para todas as perguntas / respostas sobre como descartar duplicatas consecutivas seletivamente em um dataframe do pandas, ainda não consigo descobrir o seguinte cenário:

import pandas as pd
import numpy as np

def random_dates(start, end, n, freq, seed=None):
    if seed is not None:
        np.random.seed(seed)

    dr = pd.date_range(start, end, freq=freq)
    return pd.to_datetime(np.sort(np.random.choice(dr, n, replace=False)))

date = random_dates('2018-01-01', '2018-01-12', 20, 'H', seed=[3, 1415])

data = {'Timestamp': date, 
        'Message': ['Message received.','Sending...', 'Sending...', 'Sending...', 'Work in progress...', 'Work in progress...', 
                    'Message received.','Sending...', 'Sending...','Work in progress...',
                    'Message received.','Sending...', 'Sending...', 'Sending...','Work in progress...', 'Work in progress...', 'Work in progress...',
                    'Message received.','Sending...', 'Sending...']}

df = pd.DataFrame(data, columns = ['Timestamp', 'Message'])

Eu tenho o seguinte dataframe:

             Timestamp              Message
0  2018-01-02 03:00:00    Message received.
1  2018-01-02 11:00:00           Sending...
2  2018-01-03 04:00:00           Sending...
3  2018-01-04 11:00:00           Sending...
4  2018-01-04 16:00:00  Work in progress...
5  2018-01-04 17:00:00  Work in progress...
6  2018-01-05 05:00:00    Message received.
7  2018-01-05 11:00:00           Sending...
8  2018-01-05 17:00:00           Sending...
9  2018-01-06 02:00:00  Work in progress...
10 2018-01-06 14:00:00    Message received.
11 2018-01-07 07:00:00           Sending...
12 2018-01-07 20:00:00           Sending...
13 2018-01-08 01:00:00           Sending...
14 2018-01-08 02:00:00  Work in progress...
15 2018-01-08 15:00:00  Work in progress...
16 2018-01-09 00:00:00  Work in progress...
17 2018-01-10 03:00:00    Message received.
18 2018-01-10 09:00:00           Sending...
19 2018-01-10 14:00:00           Sending...

Quero descartar as duplicatas consecutivas na coluna df ['Mensagem'] SOMENTE quando 'Mensagem' for 'Trabalho em andamento ...' e manter a primeira instância (aqui, por exemplo, o Índice 5, 15 e 16 precisa ser eliminado), idealmente Eu gostaria de obter:

             Timestamp              Message
0  2018-01-02 03:00:00    Message received.
1  2018-01-02 11:00:00           Sending...
2  2018-01-03 04:00:00           Sending...
3  2018-01-04 11:00:00           Sending...
4  2018-01-04 16:00:00  Work in progress...
6  2018-01-05 05:00:00    Message received.
7  2018-01-05 11:00:00           Sending...
8  2018-01-05 17:00:00           Sending...
9  2018-01-06 02:00:00  Work in progress...
10 2018-01-06 14:00:00    Message received.
11 2018-01-07 07:00:00           Sending...
12 2018-01-07 20:00:00           Sending...
13 2018-01-08 01:00:00           Sending...
14 2018-01-08 02:00:00  Work in progress...
17 2018-01-10 03:00:00    Message received.
18 2018-01-10 09:00:00           Sending...
19 2018-01-10 14:00:00           Sending...

Tentei soluções oferecidas em postagens semelhantes, como:

df['Message'].loc[df['Message'].shift(-1) != df['Message']]

Eu também calculei o comprimento das Mensagens:

df['length'] = df['Message'].apply(lambda x: len(x))

e escreveu uma queda condicional como:

df.loc[(df['length'] ==17) | (df['length'] ==10) | ~df['Message'].duplicated(keep='first')]

Parece melhor, mas ainda assim os índices 14, 15 e 16 foram eliminados completamente, portanto, é mal-comportado, consulte:

             Timestamp              Message  length
0  2018-01-02 03:00:00    Message received.      17
1  2018-01-02 11:00:00           Sending...      10
2  2018-01-03 04:00:00           Sending...      10
3  2018-01-04 11:00:00           Sending...      10
4  2018-01-04 16:00:00  Work in progress...      19
6  2018-01-05 05:00:00    Message received.      17
7  2018-01-05 11:00:00           Sending...      10
8  2018-01-05 17:00:00           Sending...      10
10 2018-01-06 14:00:00    Message received.      17
11 2018-01-07 07:00:00           Sending...      10
12 2018-01-07 20:00:00           Sending...      10
13 2018-01-08 01:00:00           Sending...      10
17 2018-01-10 03:00:00    Message received.      17
18 2018-01-10 09:00:00           Sending...      10
19 2018-01-10 14:00:00           Sending...      10

Agradecemos o seu tempo e ajuda!

2 answers

3
jezrael 2020-01-23 15:30.

Primeiro filtre os primeiros valores consecutivos com comparação por Series.shifte máscara de cadeia com filtrar todas as linhas sem Work in progress...valores:

df = df[(df['Message'].shift() != df['Message']) | (df['Message'] != 'Work in progress...')]
print (df)
             Timestamp              Message
0  2018-01-02 03:00:00    Message received.
1  2018-01-02 11:00:00           Sending...
2  2018-01-03 04:00:00           Sending...
3  2018-01-04 11:00:00           Sending...
4  2018-01-04 16:00:00  Work in progress...
6  2018-01-05 05:00:00    Message received.
7  2018-01-05 11:00:00           Sending...
8  2018-01-05 17:00:00           Sending...
9  2018-01-06 02:00:00  Work in progress...
10 2018-01-06 14:00:00    Message received.
11 2018-01-07 07:00:00           Sending...
12 2018-01-07 20:00:00           Sending...
13 2018-01-08 01:00:00           Sending...
14 2018-01-08 02:00:00  Work in progress...
17 2018-01-10 03:00:00    Message received.
18 2018-01-10 09:00:00           Sending...
19 2018-01-10 14:00:00           Sending...
2
Mohit Motwani 2020-01-23 15:42.

Você pode primeiro obter todas as mensagens com 'Trabalho em andamento' e compará-las com o elemento anterior e, em seguida, filtrar:

condition = (df['Message'] == 'Work in progress...') & (df['Message']==df['Message'].shift(1))

df[~condition]

     Timestamp           Message
0   2018-01-02 03:00:00 Message received.
1   2018-01-02 11:00:00 Sending...
2   2018-01-03 04:00:00 Sending...
3   2018-01-04 11:00:00 Sending...
4   2018-01-04 16:00:00 Work in progress...
6   2018-01-05 05:00:00 Message received.
7   2018-01-05 11:00:00 Sending...
8   2018-01-05 17:00:00 Sending...
9   2018-01-06 02:00:00 Work in progress...
10  2018-01-06 14:00:00 Message received.
11  2018-01-07 07:00:00 Sending...
12  2018-01-07 20:00:00 Sending...
13  2018-01-08 01:00:00 Sending...
14  2018-01-08 02:00:00 Work in progress...
17  2018-01-10 03:00:00 Message received.
18  2018-01-10 09:00:00 Sending...
19  2018-01-10 14:00:00 Sending...

MORE COOL STUFF

A 1ª temporada de 'quarta-feira' tem um grande mistério no centro

A 1ª temporada de 'quarta-feira' tem um grande mistério no centro

'Quarta-feira' da Netflix é mais do que apenas o típico drama adolescente, na verdade, a primeira temporada tem um grande mistério no centro.

Especialista em linguagem corporal aponta movimento sutil de Kate Middleton que permitiu que Camilla Parker Bowles brilhasse durante a visita de estado

Especialista em linguagem corporal aponta movimento sutil de Kate Middleton que permitiu que Camilla Parker Bowles brilhasse durante a visita de estado

Kate Middleton não queria tirar os holofotes de Camilla Parker Bowles durante o jantar de estado e a visita de estado, diz um especialista.

Por que alguns fãs esperam que a pausa 'muito amigável' de Harry Styles e Olivia Wilde seja permanente

Por que alguns fãs esperam que a pausa 'muito amigável' de Harry Styles e Olivia Wilde seja permanente

Descubra por que alguns fãs esperam que Olivia Wilde torne permanente a separação 'difícil', mas 'muito amigável' entre ela e Harry Styles.

Kate Middleton ainda está passando por 'um momento muito difícil' desde a morte da rainha Elizabeth, revela especialista real 

Kate Middleton ainda está passando por 'um momento muito difícil' desde a morte da rainha Elizabeth, revela especialista real 

Descubra por que Kate Middleton estava tendo um 'momento muito difícil' nos bastidores após a morte da rainha Elizabeth II.

Subir a escada de Jacob em Santa Helena não é para os fracos de coração

Subir a escada de Jacob em Santa Helena não é para os fracos de coração

A escada de Jacob na ilha de Santa Helena tem 699 degraus de escalada direta, tão difícil que você ganha um certificado se chegar ao topo.

The Secrets of Airline Travel Quiz

The Secrets of Airline Travel Quiz

Air travel is far more than getting from point A to point B safely. How much do you know about the million little details that go into flying on airplanes?

Where in the World Are You? Take our GeoGuesser Quiz

Where in the World Are You? Take our GeoGuesser Quiz

The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!

A Lei do Ar Limpo está sendo contestada. A SCOTUS irá protegê-la?

A Lei do Ar Limpo está sendo contestada. A SCOTUS irá protegê-la?

Um caso atualmente sendo decidido pela Suprema Corte pode limitar o escopo de autoridade que o Congresso pode dar à EPA, incluindo a Lei do Ar Limpo. Por que isso importa?

Este é o começo do fim da detenção de Brittney Griner?

Este é o começo do fim da detenção de Brittney Griner?

Brittney Griner (r.) Desde o início, o status de Brittney Griner tem sido a situação de refém americana mais singular da história moderna.

Tom Brady é o primeiro quarterback que pode finalmente dar a Julio Jones mais de 10 touchdowns em uma temporada

Tom Brady é o primeiro quarterback que pode finalmente dar a Julio Jones mais de 10 touchdowns em uma temporada

Poderíamos ver muito mais de um Julio Jones saudável na endzone este ano. John Parker Wilson, Greg McElroy, A.

Tinha que ser a Alemanha

Tinha que ser a Alemanha

Para a Inglaterra, não há vilão maior A maioria dos torcedores ingleses, se não todos, estaria balançando a cabeça quando soou o apito final da segunda semifinal do W Euro 2022. Porque sinalizou que a Alemanha estaria esperando em Wembley na final pela Inglaterra e a única coisa entre os ingleses e o primeiro grande troféu da equipe feminina.

As empresas petrolíferas estão obtendo lucros recordes, mas não mais empregos

As empresas petrolíferas estão obtendo lucros recordes, mas não mais empregos

Cinco grandes empresas de petróleo e gás devem divulgar seus relatórios de ganhos do segundo trimestre na quinta e sexta-feira. Os números já são astronômicos: a Shell anunciou na quinta-feira que ganhou US$ 11 de cair o queixo.

Eu usei este sutiã pegajoso de apoio que não me decepcionou pelo menos 30 vezes - e agora está à venda

Eu usei este sutiã pegajoso de apoio que não me decepcionou pelo menos 30 vezes - e agora está à venda

O sutiã pegajoso Gatherall é o melhor que encontrei graças ao seu design de suporte para os tamanhos A a DD. Feito de silicone adesivo de grau médico, este essencial sem costas, sem alças e reutilizável é perfeito para se vestir nas férias. E até 28 de novembro, 20% de desconto com o código GATHERNOW

Demi Lovato compartilha o conselho que daria às jovens estrelas da Disney hoje: 'Vá com calma'

Demi Lovato compartilha o conselho que daria às jovens estrelas da Disney hoje: 'Vá com calma'

"Estávamos todos trabalhando muito duro, correndo para o chão", disse Demi Lovato sobre seus dias na Disney

Melancias esmagadas em acidente doadas para um resgate de animais selvagens para encantar e hidratar animais

Melancias esmagadas em acidente doadas para um resgate de animais selvagens para encantar e hidratar animais

A Yak's Produce doou dezenas de melões para a especialista em reabilitação de vida selvagem Leslie Green e os 42 animais que vivem em seu resgate na Louisiana

Nicky Hilton Forced to Borrow Paris' 'I Love Paris' Sweatshirt After 'Airline Loses All [My] Luggage'

Nicky Hilton Forced to Borrow Paris' 'I Love Paris' Sweatshirt After 'Airline Loses All [My] Luggage'

Nicky Hilton Rothschild's luggage got lost, but luckily she has an incredible closet to shop: Sister Paris Hilton's!

8 ideias simples de configuração de home office para aumentar a produtividade do seu trabalho

8 ideias simples de configuração de home office para aumentar a produtividade do seu trabalho

Dominando a arte da configuração do home office! Os desenvolvedores AppExert dominam a arte de trabalhar em casa, mesmo quando toda a família permanece junta. Isso nos levou de volta à memória de quando nossos avós ou bisavós viviam em famílias conjuntas.

Em 2022, onde termina nossa vida digital e começa a 'vida real'?

Um viajante do tempo de até vinte anos atrás ficaria surpreso com a importância que atribuímos aos serviços digitais e baseados na Internet em nossa vida cotidiana. Plataformas como MySpace, eBay e Napster nos mostraram uma janela do que poderia ser um mundo focado em se tornar mais rápido.

Dia do Sistema de Informação Geográfica: Melhores Pilhas de Tecnologia para aprender como Desenvolvedor GIS

Dia do Sistema de Informação Geográfica: Melhores Pilhas de Tecnologia para aprender como Desenvolvedor GIS

Para uma compreensão robusta do mundo em que vivemos, precisamos de dados. No entanto, na ausência de referência espacial, esses dados podem se tornar inúteis sem contexto geográfico.

Viver na Mente e Viver com a Mente

Viver na Mente e Viver com a Mente

Apesar de viver no mesmo mundo porque algumas pessoas são calmas e outras ágeis? Por que algumas pessoas são distintamente criativas do que outras, embora vivam no mesmo mundo? Por que alguns indivíduos perdoam facilmente, enquanto outros não, enquanto residem no mesmo mundo? Muitas perguntas semelhantes surgem em nossa mente e as deixamos sem pesquisa ou as procuramos nos livros. Existem muitas diferenças entre saber e entender uma resposta dos livros e ter a resposta por experiência ou por dentro.

Language