2017-05-21 2 views
1

Ich habe eine Pandas Datenrahmen für Personen wie erstellen:Wie Datenrahmen mit Verbindungen zwischen Daten in zwei verschiedenen Datenrahmen

pid name job 
    1 Mike  A 
    2 Lucy  A 
    3 Jeff  B 

und eine zweite für Jobs wie:

id name 
1  A 
2  B 
3  C 

Was ich Ich möchte einen dritten Datenframe erstellen, in dem ich die Verbindungen zwischen Personen und Jobs auflisten kann. In diesem Dummy-Beispiel wird das gewünschte Ergebnis lauten:

personid jobid 
     1  1 
     2  1 
     3  2 

Wie kann ich das mit Pandas erreichen? Ich verstehe nicht, wie in diesem Fall zu verbinden, da es für Zeile, was nicht ist ...

Antwort

0

Versuchen mit pandas: Angenommen, Sie haben DF1 und DF2:

import pandas as pd 
df1 = pd.read_csv('Data1.csv') 
df2 = pd.read_csv('Data2.csv') 
print df1 
print df2 

df1:

pid name job 
0 1 Mike A 
1 2 Lucy A 
2 3 Jeff B 

und DF2:

id name 
0 1 A 
1 2 B 
2 3 C 

dann:

df2['job']=df2['name'] 
df_result = df1.merge(df2, on='job', how='left') 
print df_result[['pid','id']] 

Es ausdrucken:

pid id 
0 1 1 
1 2 1 
2 3 2 
+0

Gibt es eine Möglichkeit, den Vergleich von "Job" etwas intelligenter zu machen? in meinem realen Leben Szenario stimmen die Zeichenfolgen nicht 100% – user299791

+0

was meinst du für die Zeichenfolge nicht 100% übereinstimmen? Wenn schmutzige Daten vorhanden sind, können Sie sie vor dem Vergleich bereinigen. Die Zusammenführung muss einen gemeinsamen Schlüssel haben, der in beiden Datenrahmen sein sollte. –

0

Ist das, was Sie suchen?

output = pd.merge(persons, jobs, how='left', left_on='job', right_on='name')[['pid', 'id']] 

Ausgang:

pid id 
0 1 1 
1 2 1 
2 3 2 
0

Die beiden gegebenen Datenrahmen sind die folgenden:

import pandas as pd 
people_df = pd.DataFrame([[1, "Mike", "A"], [2, "Lucy", "A"], [3, "Jeff", "B"]], columns=["pid", "name", "job"]) 
jobs_df = pd.DataFrame([[1, "A"], [2, "B"], [3, "C"]], columns=["id", "name"]) 

Sie können das gewünschte Ergebnis erhalten, indem merge Methode.

merged_df = pd.merge(people_df, jobs_df, left_on='job', right_on='name') 
result = merged_df[['pid', 'id']].rename(columns={'pid': 'personid', 'id': 'jobid'}) # for extracting and renaming data 

"inner join" ist in Standard merge Methode verwendet. Sie können how Option für andere "Join" verwenden, wenn Sie möchten.

Verwandte Themen