Substituir número repetitivo com valores NAN excepto o primeiro, na coluna pandas

votos
0

Eu tenho um quadro de dados como este,

df
col1    col2
  1       A
  2       A
  3       B
  4       C
  5       C
  6       C
  7       B
  8       B
  9       A

Agora podemos ver que não há ocorrência contínua de A, B e C. Eu quero apenas as linhas onde a ocorrência está começando. E os outros valores da mesma ocorrência será nan.

O quadro final de dados Eu estou procurando será semelhante,

df
col1    col2
  1       A
  2       NA
  3       B
  4       C
  5       NA
  6       NA
  7       B
  8       NA
  9       A

Eu posso fazê-lo usando loop for e comparando, mas o tempo de execução será mais. Estou à procura de maneira Python para fazê-lo. Alguns atalhos panda pode ser.

Publicado 24/10/2019 em 12:59
fonte usuário
Em outras línguas...                            


1 respostas

votos
0

Comparar por Series.shiftvalores Ed e valores ausentes por Series.whereou numpy.where:

df['col2'] = df['col2'].where(df['col2'].ne(df['col2'].shift()))
#alternative
#df['col2'] = np.where(df['col2'].ne(df['col2'].shift()), df['col2'], np.nan)

Ou por DataFrame.loccom a condição invertida por ~:

df.loc[~df['col2'].ne(df['col2'].shift()), 'col2'] = np.nan

print (df)
   col1 col2
0     1    A
1     2  NaN
2     3    B
3     4    C
4     5  NaN
5     6  NaN
6     7    B
7     8  NaN
8     9    A

detalhe :

print (df['col2'].ne(df['col2'].shift()))
0     True
1    False
2     True
3     True
4    False
5    False
6     True
7    False
8     True
Name: col2, dtype: bool
Respondeu 24/10/2019 em 13:01
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more