Remplacez nombre répétitif avec des valeurs NAN, sauf la première, dans la colonne de pandas géants

voix
0

J'ai une trame de données comme celui-ci,

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

Maintenant, nous pouvons voir qu'il ya présence continue de A, B et C. Je veux que les lignes où l'événement commence. Et seront nan les autres valeurs du même événement.

La trame de données finale Je cherche ressemblera,

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

Je peux le faire en utilisant pour la boucle et la comparaison, mais le temps d'exécution sera plus. Je cherche façon pythonique de le faire. Certains raccourcis panda peuvent être.

Créé 24/10/2019 à 12:59
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
0

Comparer par les Series.shiftvaleurs ées et des valeurs manquantes par 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 par DataFrame.locà la condition inversée par ~:

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

détail :

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
Créé 24/10/2019 à 13:01
source utilisateur

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