2017-10-23 1 views
0

Ich habe eine data_file der Größe 88k Reihen mit 76 Spalten.Wie zu vergleichen, ob die Liste der Elemente in jeder Zeile eines Datenrahmens in Python

Ich möchte, wenn eine Liste vergleichen: subset = [40,49] ist in wie viele Zeilen

ich zu einem Zeitpunkt eine Zeile bin im Vergleich wie folgt:

Mein Code:

counter=0 
for row in data_file.itertuples(): 
    if all(np.isin(subset, row)): 
     counter = counter+1 
print('Total occurences of subset: ', subset, '= ', counter) 
print('--------------------------') 

Ausführungszeit: 6,6398055266834035

gibt es einen besseren Weg, um alle Zeilen zu einer Zeit, zu vergleichen und Zeit sparen. Ich muss einige Untermengen überprüfen, damit die Zeit meines Codes hoch ist.

Danke,

Gopi

+0

konnte ich dieses 'np.sum schreiben ([alle (np.isin (Teilmenge, Reihe)) für die Reihe in data_file.itertuples()]) 'aber die Ausführungszeit ist immer noch gleich – Gopi

+0

Ich kann mir nicht vorstellen, dass es viel tun wird, aber anstelle von counter = counter + 1, können Sie Counter + = 1 – cMcNerlin

Antwort

1
np.sum((data_file==subset[0]).any(axis=1) & (data_file==subset[1]).any(axis=1)) 
+0

Das funktionierte großartig @ Sam17, Ausführungszeit ist 0,27 Sekunden. Kannst du erklären, wie diese Linie funktioniert? Ich bin neu in Python – Gopi

+0

Ich teilte Ihren Code in mehrere Zeilen zu verstehen, Sie gefunden 'Teilmenge übereinstimmt' getrennt und nahm' logische UND' von ihnen und nahm schließlich die 'Summe' von' final boolean', um dies zu bekommen .. danke. .. – Gopi

+0

(Daten_Datei == Teilmenge [0]). Any (Achse = 1) vergleicht jedes Element im Datenframe mit der Zahl und gibt eine boolesche Reihe mit True zurück, wenn die Nummer in der Zeile steht, oder False, wenn dies nicht der Fall ist. – Sam17

Verwandte Themen