Sostituire il numero ripetitivo con valori NAN tranne il primo, nella colonna panda

voti
0

Ho un frame di dati come questo,

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

Ora possiamo vedere che c'è verificarsi continuo di A, B e C. voglio solo le righe in cui il verificarsi sta cominciando. E gli altri valori dello stesso evento sarà nan.

La cornice finale dei dati Cerco sarà simile,

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

Posso farlo utilizzando ciclo for e il confronto, ma il tempo di esecuzione sarà più. Sto cercando modo divinatorio per farlo. Alcune scorciatoie panda potrebbero essere.

È pubblicato 24/10/2019 alle 12:59
fonte dall'utente
In altre lingue...                            


1 risposte

voti
0

Confronto con Series.shifti valori di ED e valori mancanti da Series.whereo 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)

O DataFrame.loccon condizioni invertito da ~:

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

Particolare :

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
Risposto il 24/10/2019 a 13:01
fonte dall'utente

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