J'ai ce dataframe et je dois supprimer tous les doublons mais je dois garder les premières ET dernières valeurs
Par exemple:
1 0 4 0
résultat:
1 0 2 0 3 0 4 0
J'ai essayé df.column.drop_duplicates (keep = ("first", "last")) mais ça ne dit rien, ça retourne p >
ValueError: keep doit être "first", "last" ou False
Quelqu'un sait-il comment faire pour cela?
Merci
3 Réponses :
Utilisez un groupby sur votre colonne nommée colonne , puis réindexez. Si vous souhaitez vérifier les valeurs en double dans plusieurs colonnes, vous pouvez étendre les colonnes que vous incluez dans votre groupe par.
column 0 0 3 0
Entrée:
df.groupby('column', as_index=False).apply(lambda x: x if len(x)==1 else x.iloc[[0, -1]]).reset_index(level=0, drop=True)
column 0 0 1 0 2 0 3 0
Sortie :
df = pd.DataFrame({'column':[0,0,0,0]})
vous ne pouvez pas supprimer à la fois le premier et le dernier ... donc l'astuce est trop concatant les trames de données du premier et du dernier.
Lorsque vous concattez, vous devez gérer la création de doublons de non-doublons. Donc, ne concattez que des index uniques dans le 2nd Dataframe. (Vous ne savez pas si Merge / Join fonctionnerait mieux?)
d1 = df.drop_duplicates(keep=("first"))
d2 = df.drop_duplicates(keep=("last"))
d3 = pd.concat([d1,d2.loc[set(d2.index) - set(d1.index)]])
d3
Out[60]:
cnt
1 0
10 1
4 0
Ensuite, procédez comme suit:
import pandas as pd
d = {1:0,2:0,10:1, 3:0,4:0}
df = pd.DataFrame.from_dict(d, orient='index', columns=['cnt'])
print(df)
cnt
1 0
2 0
10 1
3 0
4 0