2017-05-15 10 views
1

Hallo Leute,

Ich benutze Dataframe, um zwei Tabellen (A und B) zu erstellen und beide haben die gleichen Spalten. (1. Spalte ist ‚ID‘ und eine Tabelle könnte mehr als eine Zeile mit der gleichen ID haben)Pandas (Dataframe) Daten auswählen

Ich möchte eine neue Tabelle (C) auf eine Basis schaffen und einige Zeilen von B. Wenn die ID in der Tabelle B tritt auch in A dann diese Zeile in C hinzufügen

Mein Code:

from pandas import DataFrame 

A_ID = [1,2,3,1,2] 
A_place = [1,2,3,2,1] 

B_ID = [4,2,6] 
B_place = [2,2,3] 

A_data = {'ID':A_ID,'place':A_place} 
A_table = DataFrame(A_data) 

B_data = {'ID':B_ID,'place':B_place} 
B_table = DataFrame(B_data) 

C_table = A_table 

for n in range(len(B_table)): 
    if B_table['ID'][n] in list(A_table['ID']): 
    C_table = C_table.append(B_table[n:n+1]) 

Frage:

Meine Frage ist, dass ist es eine andere Möglichkeit, es zu tun, ohne for-Schleife? Ich werde viel Zeit mit Millionen von Daten und For-Schleifen verschwenden.

Übrigens, gibt es andere Tools besser als Pandas mit Big Data umzugehen?

Danke deine Hilfe !!

+2

Sie können nur filtern, wie 'C_table = B_table [B_table ['ID']. Isin (A_table ['ID'])]' – EdChum

+0

Es funktioniert !! Ich ändere etwas, um meine Anforderung zu erfüllen, und es sieht so aus: 'C_table = A_table.append (B_table [B_table ['ID']. Isin (A_table ['ID'])])' Ist es schneller als für Schleife? –

+0

Oh ja. es sollte schneller sein als Looping. –

Antwort

0

Mit Blick auf, was Sie tun es mehr performant sein wird, gerade tun:

C_table = pd.concat([C_table, B_table[B_table['ID'].isin(A_table['ID'])]]) 

Also erstens die innere Aussage:

B_table[B_table['ID'].isin(A_table['ID'])] 

Filtert die Zeilen in B_table wo die IDs nicht in der Tabelle A_table, wie Sie einfach anhängen, anstatt eine Reihe (n) zu einer Zeit, die langsamer sein wird, nur concat sie an die bestehende C_table

anhängen
+0

Ich habe einen Zeittest gemacht und Ihre Lösung und die mit append haben fast die gleiche Geschwindigkeit. Danke trotzdem für deine Idee! –

+0

Wenn meine Antwort Ihre Frage gelöst hat, dann denken Sie daran, sie zu akzeptieren – EdChum

+0

Natürlich! Ich habe eine neue Funktion concat gelernt. Vielen Dank. –