2017-08-10 3 views
0

Est-ce que quelqu'un sait s'il est possible de remplacer une double boucle en python par quelque chose de plus rapide comme la fonction apply? Par exemple, j'ai ce dataframe:Remplacer les boucles doubles python par apply

df = pd.DataFrame() 
df["col_1"] = ["hello", "salut","hello", "bye", "bye","hi","hello", "hello"] 
df["col_2"] = ["dog", "dog", "dog", "cat", "cat", "mouse","dog","cat"] 
df["col_3"] = [100,45,100,51,51,32,100,85] 

et cette fonction:

def f (l1, l2): if list(l1) == list(l2) : return 1 else: return 0

qui renvoie 1 si deux listes sont identiques et 0 sinon. Je voudrais appliquer cette fonction pour créer une colonne "similaire" comme ceci: enter image description here

Ce que je peux facilement faire avec une double boucle, mais je voudrais le faire plus rapidement avec moins de complexité.

Merci pour votre aide! :)

Répondre

1

Fondamentalement, vous voulez trouver des combinaisons de col qui ont des doublons, et les marquer comme 1 dans la colonne "similaire". pandas.DataFrame.duplicated fait exactement cela, il vous suffit de faire:

df.duplicated(keep=False) 

Voir https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.duplicated.html#pandas.DataFrame.duplicated, keep=False marquera tous les doublons comme True.

Ensuite, il vous suffit de convertir booléenne int:

df['similar'] = list(map(int, df.duplicated(keep=False))) 
+0

Merci qui est 10 fois plus rapide! – Bennox75