Vervang repeterende getal met NAN waarden behalve de eerste, in kolom panda

stemmen
0

Ik heb een dataframe als dit,

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

Nu kunnen we zien dat er continu optreden van A, B en C. Ik wil alleen de rijen waar het voorval begint. En de andere waarden van hetzelfde voorval zal zijn nan.

De definitieve gegevens kader Ik ben op zoek naar eruit zal zien,

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

Ik kan het doen met behulp van lus en het vergelijken, maar de uitvoering tijd zal meer zijn. Ik ben op zoek naar pythonic manier om het te doen. Sommige panda snelkoppelingen kunnen zijn.

De vraag is gesteld op 24/10/2019 om 12:59
bron van user
In andere talen...                            


1 antwoorden

stemmen
0

Vergelijken op Series.shifted waarden en ontbrekende waarden door Series.whereof 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)

Of door DataFrame.locmet omgekeerde conditie door ~:

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

detail :

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
antwoordde op 24/10/2019 om 13:01
bron van user

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