2016-08-04 5 views
0

finde ich mich oft mit mehreren Pandas Datenrahmen in der folgenden Form:Wie kann ich mehrere Pandas-Datenrahmen in einer bestimmten Spalte ohne 'Pandas.merge' zusammenführen?

import pandas as pd 
df1 = pd.read_table('filename1.dat') 
df2 = pd.read_table('filename2.dat') 
df3 = pd.read_table('filename3.dat') 

print(df1) 
columnA first_values 
name1  342 
name2  822 
name3  121 
name4  3434 

print(df2) 
columnA second_values 
name1  8 
name2  1 
name3  1 
name4  2 

print(df3) 
columnA third_values 
name1  910 
name2  301 
name3  132 
name4  299 

ich auf ‚columnA‘ zusammen jede dieser Datenrahmen fusionieren möchten, geben

columnA first_values second_values third_values 
name1  342    8    910 
name2  822    1    301 
name3  121    1    132 
name4  3434   2    299 

ich normalerweise auf diese zurückgreifen hack:

merged1 = df1.merge(df2, on='columnA') 

dann

merged2 = df3.merge(merged1, on='columnA') 

Aber das skaliert nicht für viele Datenrahmen. Was ist der richtige Weg, dies zu tun?

+1

'pandas.concat'? – BrenBarn

+0

@BrenBarn Aber concat auf was? Sie können einen Index erstellen? – ShanZhengYang

+3

So etwas ähnliches? 'pd.concat ([df.set_index ('columnA') für df in dfs], axis = 1) .reset_index()' – ayhan

Antwort

2

Sie columnA als Index und concat einstellen (Index am Ende zurücksetzen):

dfs = [df1, df2, df3] 

pd.concat([df.set_index('columnA') for df in dfs], axis=1).reset_index() 
Out: 
    columnA first_values second_values third_values 
0 name1   342    8   910 
1 name2   822    1   301 
2 name3   121    1   132 
3 name4   3434    2   299 
0

Unter der Annahme, dass die drei Datenrahmen den gleichen Index haben, können Sie nur Spalten hinzufügen die gewünschten Datenrahmen zu erhalten und sich keine Sorgen über Fusion, wie so,

import pandas as pd 

#create the dataframe 
colA = ['name1', 'name2', 'name3', 'name4'] 
first = [ 342, 822, 121, 3434] 
second = [ 8,1,1,2] 
third = [ 910,301,132, 299] 
df1 = pd.DataFrame({'colA': colA, 'first': first}) 
df2 = pd.DataFrame({'colA': colA, 'second': second}) 
df3 = pd.DataFrame({'colA': colA, 'third': third}) 


df_merged = df1.copy() 
df_merged['second']= df2.second 
df_merged['third']= df3.third 
print (df_merged.head()) 

    colA first second third 
0 name1 342  8 910 
1 name2 822  1 301 
2 name3 121  1 132 
3 name4 3434  2 299 
Verwandte Themen