Αντικατάσταση επαναλαμβανόμενες αριθμό με τιμές ΝΑΝ εκτός από την πρώτη, στη στήλη pandas

ψήφοι
0

Έχω ένα πλαίσιο δεδομένων όπως αυτό,

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

Τώρα μπορούμε να δούμε ότι υπάρχει συνεχής εμφάνιση των Α, Β και Γ θέλω μόνο τις σειρές όπου η εμφάνιση έχει αρχίσει. Και οι άλλες τιμές του ίδιου περιστατικού θα είναι nan.

Το τελικό πλαίσιο δεδομένων Ψάχνω για θα μοιάζει,

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

Μπορώ να το κάνω με τη χρήση για βρόχο και τη σύγκριση, όμως, ο χρόνος εκτέλεσης θα είναι περισσότερα. Ψάχνω για pythonic τρόπος για να το κάνει. Ορισμένες συντομεύσεις panda μπορεί να είναι.

Δημοσιεύθηκε 24/10/2019 στις 12:59
πηγή χρήστη
Σε άλλες γλώσσες...                            


1 απαντήσεις

ψήφοι
0

Σύγκριση με Series.shiftτις τιμές ed και τις τιμές που λείπουν από Series.whereή 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)

Ή από DataFrame.locμε ανεστραμμένη κατάσταση από ~:

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

λεπτομέρεια :

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
Απαντήθηκε 24/10/2019 στις 13:01
πηγή χρήστη

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