Înlocuiți număr repetitive cu valori NAN, cu excepția primei, în coloana pandas

voturi
0

Am un cadru de date ca aceasta,

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

Acum putem vedea că există apariția continuă a A, B și C. Vreau doar rândurile în care apariția este de pornire. Și celelalte valori ale aceleiași incidențe va fi nan.

Cadrul de date finale Caut va arăta,

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

Eu o pot face folosind pentru buclă și compararea, dar timpul de execuție va fi mai mult. Caut modalitate de a face acest lucru pythonic. Unele comenzi rapide pot fi panda.

Întrebat 24/10/2019 la 12:59
sursa de către utilizator
În alte limbi...                            


1 răspunsuri

voturi
0

Comparați în funcție de Series.shiftvalorile Ed și valorile lipsă de Series.wheresau 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)

Sau de DataFrame.loccondiție inversat prin ~:

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

detaliu :

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
Publicat 24/10/2019 la 13:01
sursa de către utilizator

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