2015-01-25 27 views
24

İki satırlık df_a ve df_b ile eşit sayıda satır (nRow) birbiri ardına anahtar gözetmeksizin birleştirmem gerekiyor. Bu işlev, R programming language'da cbind'a benzer. Her bir veri çerçevesindeki sütun sayısı farklı olabilir. Ortaya çıkan veri çerçevesi, aynı sayıda satır nRow ve her iki veri çerçevesindeki sütun sayısı toplamına eşit sütun sayısına sahip olacaktır. Bu sözcüklerde, bu iki veri çerçevesinin kör bir sütun dizilimidir.Pandalarda iki veri çerçevesinin satırlarını birleştirin

import pandas as pd 
dict_data = {'Treatment': ['C', 'C', 'C'], 'Biorep': ['A', 'A', 'A'], 'Techrep': [1, 1, 1], 'AAseq': ['ELVISLIVES', 'ELVISLIVES', 'ELVISLIVES'], 'mz':[500.0, 500.5, 501.0]} 
df_a = pd.DataFrame(dict_data) 
dict_data = {'Treatment1': ['C', 'C', 'C'], 'Biorep1': ['A', 'A', 'A'], 'Techrep1': [1, 1, 1], 'AAseq1': ['ELVISLIVES', 'ELVISLIVES', 'ELVISLIVES'], 'inte1':[1100.0, 1050.0, 1010.0]} 
df_b = pd.DataFrame(dict_data) 

cevap

41

çağrı concat ve pas param axis=1 kolon-bilge bitiştirmek için:

In [5]: 

pd.concat([df_a,df_b], axis=1) 
Out[5]: 
     AAseq Biorep Techrep Treatment  mz  AAseq1 Biorep1 Techrep1 \ 
0 ELVISLIVES  A  1   C 500.0 ELVISLIVES  A   1 
1 ELVISLIVES  A  1   C 500.5 ELVISLIVES  A   1 
2 ELVISLIVES  A  1   C 501.0 ELVISLIVES  A   1 

    Treatment1 inte1 
0   C 1100 
1   C 1050 
2   C 1010 

merging, joining and concatenating İnternet'te çeşitli yöntemler için yararlı bir rehber vardır. Eğer merge can hayır çatışan sütunlar var ve onlar satır aynı sayıda endeksi tarafından kullandıkça Örneğin

:

In [6]: 

df_a.merge(df_b, left_index=True, right_index=True) 
Out[6]: 
     AAseq Biorep Techrep Treatment  mz  AAseq1 Biorep1 Techrep1 \ 
0 ELVISLIVES  A  1   C 500.0 ELVISLIVES  A   1 
1 ELVISLIVES  A  1   C 500.5 ELVISLIVES  A   1 
2 ELVISLIVES  A  1   C 501.0 ELVISLIVES  A   1 

    Treatment1 inte1 
0   C 1100 
1   C 1050 
2   C 1010 

Ve basit join yukarıdaki gibi aynı nedenlerden dolayı

çok çalışır:

In [7]: 

df_a.join(df_b) 
Out[7]: 
     AAseq Biorep Techrep Treatment  mz  AAseq1 Biorep1 Techrep1 \ 
0 ELVISLIVES  A  1   C 500.0 ELVISLIVES  A   1 
1 ELVISLIVES  A  1   C 500.5 ELVISLIVES  A   1 
2 ELVISLIVES  A  1   C 501.0 ELVISLIVES  A   1 

    Treatment1 inte1 
0   C 1100 
1   C 1050 
2   C 1010 
+3

Emin değilim (örneğin bazı satırları silerken) bu durumda kaçırıldığında rehberlik neden benim gerçek veriler, her df, 'concat' bana 2000 satır ama' join' verir 1000 sırasına sahip olan ilgili iyi çalışıyor. Örnek verilerde, her ikisi de iyi çalışıyor – user1140126

+1

Herhangi bir sütun adı çatışması olup olmadığını kontrol edin, bunu 'df_a.columns.equals (df_b.columns)' yaparak test edebilirsiniz ' – EdChum

+1

Eğer indeks değerlerinin eşleşmiyorsa eşleşip eşleşmediğini kontrol etmeniz gerekir. t sonra daha fazla satırlar elde edeceksiniz gözlemlemek zorunda kalabilirsiniz 'df_b = df_b.reindex_like (df_a)' bitiştirmeden önce – EdChum

0

@EdChum sayesinde, özellikle dizinler eşleşmediğinde aynı sorunla mücadele ediyordum. Ne yazık ki pandalar içinde

import pandas as pd 
t=pd.DataFrame() 
t['a']=[1,2,3,4] 
t=t.loc[t['a']>1] #now index starts from 1 

u=pd.DataFrame() 
u['b']=[1,2,3] #index starts from 0 

#option 1 
#keep index of t 
u.index = t.index 

#option 2 
#index of t starts from 0 
t.reset_index(drop=True, inplace=True) 

#now concat will keep number of rows 
r=pd.concat([t,u], axis=1) 
İlgili konular