2 votes

Pandas, supprimer les lignes de noms dupliquées, si le nom comporte plus de 20 caractères

Je dispose de la base de données suivante, appelée df :

Name     State
Down     NY
Down     NY
Down     NY
Next In  NJ
Next In  NJ
Next In  NJ

Je veux pouvoir supprimer les lignes dupliquées basées sur le nom seulement si le nom a plus de 5 caractères. Est-ce possible avec drop_duplicates ?

1voto

user1740577 Points 669

Il faut d'abord trouver les lignes qui str.len () > 5 y drop_duplicated Ces lignes sont ensuite ajoutées à d'autres lignes. Essayez ceci :

df = pd.DataFrame({
    'Name': ['Down','Down','Down','Next In','Next In','Next In'],
    'State': ['NY','NY','NY','NY','NY','NY']
})

mask = (df['Name'].str.len() > 5)
df[mask].drop_duplicates().append(df[~mask]).sort_index()

Output:

    Name    State
0   Down    NY
1   Down    NY
2   Down    NY
3   Next In NY

1voto

sophocles Points 5617

Vous pouvez drop_duplicates() uniquement sur les lignes où Nom a une longueur supérieure à 5, et pd.cocnat() avec l'autre partie du DataFrame :

pd.concat([df[df.Name.str.len()<=5],df[df.Name.str.len()>5].drop_duplicates()],axis=0)

      Name State
0     Down    NY
1     Down    NY
2     Down    NY
3  Next In    NJ

0voto

Shotaro Jashin Points 36

Vous pouvez également supprimer les lignes où la valeur de la colonne "Nom" existe dans plus d'une ligne et où la longueur de Nom est supérieure à 5 en utilisant la fonction "Drop" du cadre de données. Axis = 0 signifie que nous allons supprimer des lignes, inplace= True signifie que nous allons travailler sur la variable df.

df = pd.DataFrame({'Name':['Down', 'Down', 'Down', 'Next In', 'Next In', 'Next 
In'], 'State':['NY', 'NJ', 'NY', 'NY', 'NJ', 'NJ']})

#Iterate over all rows
for ind in df.index:
   #checks if name is greater than 5 and checks number of occurences of the name in whole dataframe
    if (len(df.iloc[ind]["Name"])>5 and df.value_counts(subset=['Name'])[df.iloc[ind]["Name"]]>1):
        df.drop(ind, axis=0, inplace=True)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X