2017-08-10 3 views
0

Weiß jemand, ob es möglich ist, eine doppelte Schleife in Python durch etwas schneller als die Funktion apply zu ersetzen? Zum Beispiel habe ich diese Datenrahmen:Ersetzen Sie doppelte Schleifen Python mit anwenden

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] 

und diese Funktion:

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

die sonst 1, wenn zwei Listen sind identisch und 0 zurückgibt. Ich möchte diese Funktion anwenden, um eine Spalte "ähnlich" wie folgt zu erstellen: enter image description here

Was kann ich leicht mit einer doppelten Schleife tun, aber ich möchte dies schneller mit weniger Komplexität zu tun.

Vielen Dank für Ihre Hilfe! :)

Antwort

1

Grundsätzlich möchten Sie Spaltenkombinationen finden, die Duplikate haben, und markieren Sie sie als 1 in Spalte "ähnlich". pandas.DataFrame.duplicated tut genau das, man muss nur tun:

df.duplicated(keep=False) 

Siehe https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.duplicated.html#pandas.DataFrame.duplicated, keep=False alle Duplikate als True markieren.

Dann brauchen Sie nur boolean konvertieren int:

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

Dank, die 10-mal schneller ist! – Bennox75

Verwandte Themen