2013-12-16 48 views
21

Dies ist wahrscheinlich einfach, aber ich habe die folgenden Daten:Anfügen Spalte Pandas Dataframe

Im Datenrahmen 1:

index dat1 
0  9 
1  5 

Im Datenrahmen 2:

index dat2 
0  7 
1  6 

Ich möchte ein Datenrahmen mit der folgenden Form:

index dat1 dat2 
0  9  7 
1  5  6 

Ich habe versucht, die append Methode zu verwenden, aber ich bekomme eine Kreuzverbindung (d. H. kartesisches Produkt).

Was ist der richtige Weg?

+2

Haben Sie den 'join' Methode versuchen? – BrenBarn

+0

data_frame_1 ['dat2'] = data_frame_2 ['dat2'] – lowtech

+0

@lowtech: stellt das sicher, dass die Indizes richtig gepaart sind? – BenDundee

Antwort

37

Es scheint im Allgemeinen Sie suchen nur für einen Join:

> dat1 = pd.DataFrame({'dat1': [9,5]}) 
> dat2 = pd.DataFrame({'dat2': [7,6]}) 
> dat1.join(dat2) 
    dat1 dat2 
0  9  7 
1  5  6 
+3

Oder 'pd.concat ([dat1, dat2], axis = 1)' in diesem Fall. – DSM

+0

Dies ist der "richtige" Weg, es zu tun, also bekommt der Kreis das Quadrat! – BenDundee

+0

@BenDundee Join und concat verwenden eine Menge des gleichen Codes unter der Haube, so dass die "richtige" Art wahrscheinlich nur dann von Bedeutung ist, wenn Sie Randfälle betrachten. Wenn zum Beispiel hier beide DataFrames eine 'data'-Spalte hätten, würde der Join * fehlschlagen *, wohingegen ein concat Ihnen zwei Spalten mit dem Namen' data 'geben würde. – U2EF1

1

Nur eine Frage der richtigen Google-Suche:

data = dat_1.append(dat_2) 
data = data.groupby(data.index).sum() 
+11

Diese Seite ist, was die Google-Suche aufgetaucht ist. – denson

13

Sie können auch verwenden:

dat1 = pd.concat([dat1, dat2], axis=1) 
5

Beide Join() und concat() Weg könnte das Problem lösen. Es gibt jedoch eine Warnung, die ich erwähnen muss: Setzen Sie den Index zurück, bevor Sie beitreten oder concat, wenn Sie versuchen, mit einem Datenrahmen umzugehen, indem Sie einige Zeilen aus einem anderen DataFrame auswählen.

Ein Beispiel unten zeigt einige interessante Verhalten zu verbinden und Concat:

dat1 = pd.DataFrame({'dat1': range(4)}) 
dat2 = pd.DataFrame({'dat2': range(4,8)}) 
dat1.index = [1,3,5,7] 
dat2.index = [2,4,6,8] 

# way1 join 2 DataFrames 
print(dat1.join(dat2)) 
# output 
    dat1 dat2 
1  0 NaN 
3  1 NaN 
5  2 NaN 
7  3 NaN 

# way2 concat 2 DataFrames 
print(pd.concat([dat1,dat2],axis=1)) 
#output 
    dat1 dat2 
1 0.0 NaN 
2 NaN 4.0 
3 1.0 NaN 
4 NaN 5.0 
5 2.0 NaN 
6 NaN 6.0 
7 3.0 NaN 
8 NaN 7.0 

#reset index 
dat1 = dat1.reset_index(drop=True) 
dat2 = dat2.reset_index(drop=True) 
#both 2 ways to get the same result 

print(dat1.join(dat2)) 
    dat1 dat2 
0  0  4 
1  1  5 
2  2  6 
3  3  7 


print(pd.concat([dat1,dat2],axis=1)) 
    dat1 dat2 
0  0  4 
1  1  5 
2  2  6 
3  3  7 
+0

Gut gesagt und guter Punkt. Ich habe versucht, ohne Index zurückzusetzen und erzeugt eine ganze Menge NULL – Anand