2016-09-29 3 views
3

Ich habe 2 Datenrahmen aufgeführt wie folgtMerging 2 Datenrahmen unter Verwendung eines ähnlichen Spalten

df

Type  Breed  Common Color Other Color Behaviour 
Golden  Big   Gold   White  Fun  
Corgi  Small   Brown   White  Crazy 
Bulldog Medium   Black   Grey  Strong 

df2

Type    Breed Behaviour Bark Sound 
Pug    Small  Sleepy   Ak 
German Shepard Big  Cool   Woof 
Puddle   Small  Aggressive  Ek 

I 2 Datenrahmen von Spalten Type, Breed und Behavior fusionieren wollten.

Daher wäre mein Wunsch ausgegeben werden:

Type   Breed  Behavior 
Golden   Big   Fun 
Corgi   Small  Crazy 
Bulldog   Medium  Strong 
Pug    Small  Sleepy 
German Shepard Big   Cool 
Puddle   Small  Aggressive 

Antwort

4

Sie benötigen concat:

print (pd.concat([df1[['Type','Breed','Behaviour']], 
        df2[['Type','Breed','Behaviour']]], ignore_index=True)) 

      Type Breed Behaviour 
0   Golden  Big   Fun 
1   Corgi Small  Crazy 
2   Bulldog Medium  Strong 
3    Pug Small  Sleepy 
4 German Shepard  Big  Cool 
5   Puddle Small Aggressive 

Allgemeinere verwenden ist intersection für Spalten beider DataFrames:

cols = df1.columns.intersection(df2.columns) 
print (cols) 
Index(['Type', 'Breed', 'Behaviour'], dtype='object') 

print (pd.concat([df1[cols], df2[cols]], ignore_index=True)) 
      Type Breed Behaviour 
0   Golden  Big   Fun 
1   Corgi Small  Crazy 
2   Bulldog Medium  Strong 
3    Pug Small  Sleepy 
4 German Shepard  Big  Cool 
5   Puddle Small Aggressive 

Allgemeinere wenn df1 und df2 haben keine NaN Werte dropna zum Entfernen von Spalten mit NaN verwenden:

print (pd.concat([df1 ,df2], ignore_index=True)) 
    Bark Sound Behaviour Breed Common Color Other Color   Type 
0  NaN   Fun  Big   Gold  White   Golden 
1  NaN  Crazy Small  Brown  White   Corgi 
2  NaN  Strong Medium  Black  Grey   Bulldog 
3   Ak  Sleepy Small   NaN   NaN    Pug 
4  Woof  Cool  Big   NaN   NaN German Shepard 
5   Ek Aggressive Small   NaN   NaN   Puddle    


print (pd.concat([df1 ,df2], ignore_index=True).dropna(1)) 
    Behaviour Breed   Type 
0   Fun  Big   Golden 
1  Crazy Small   Corgi 
2  Strong Medium   Bulldog 
3  Sleepy Small    Pug 
4  Cool  Big German Shepard 
5 Aggressive Small   Puddle 
+0

Sie überlappen vielen Dank. Es klappt! –

3

mit join Löschen von Spalten, die nicht

df1.T.join(df2.T, lsuffix='_').dropna().T.reset_index(drop=True) 

enter image description here

Verwandte Themen