2016-08-04 1 views
0

私は、多くの場合、次の形式でいくつかのパンダのデータフレームで自分自身を見つける:「pandas.merge」を除いて、特定の列の複数のパンダデータフレームをどのようにマージできますか?

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 

私は

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

を与え、「columnA」で一緒にこれらのデータフレームのそれぞれを統合したいと思い、私は通常、これに頼りますハック:その後、

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

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

しかし、これは多くのデータフレームではスケーリングされません。これを行う正しい方法は何ですか?

+1

'pandas.concat'? – BrenBarn

+0

@BrenBarnしかし、何の連鎖?索引を連結することはできますか? – ShanZhengYang

+3

これは何か? 'dfsのdfのためのdf.set_index( 'columnA')、軸= 1).reset_index()' – ayhan

答えて

2

、そうのように、マージ心配希望データフレームを取得するために列を追加し、ことができませんでした最後のリセットインデックス):

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

3つのデータフレームが同じインデックスを持っていると仮定すると、あなたはちょうどあなたが(インデックスと連結としてcolumnAを設定することができます

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 
関連する問題