2017-09-04 2 views
2

Ich habe zwei Datenrahmen:Pandas: Wie neue Spalten auf alle Zeilen in Datenrahmen anhängen

df1 = pd.DataFrame(data={ 
    'ColumnA': ['A1','A2','A3'], 
    'ColumnB' : [ 'B1','B2','B3'], 
    'ColumnC' : [ 'C1','C2','C3'] 
}) 


df2 = pd.DataFrame(data={ 
    'id': ['1'], 
    'Value1' : [ 'v1'], 
    'Value2' : [ 'v2'] 
}) 



    ColumnB ColumnC columnA id 
0  B1  C1  A1 1 
1  B2  C2  A2 1 
2  B3  C3  A3 1 


    Value1 Value2 id 
0  v1  v2 1 

Und auf der Suche df3 zu bekommen, wo alle Zeilen auf df1 Spalten von DF2 haben.

ColumnB ColumnC columnA id Value1 Value2 
0  B1  C1  A1 1  v1  v2 
1  B2  C2  A2 1  v1  v2 
2  B3  C3  A3 1  v1  v2 

Aktuell im, es auf diese Weise tun:

id = df2['id'][0] 
df1['id'] = id 

df3 = df1.merge(df2,left_on='id',right_on='id',how='left') 

Was ist der bessere Weg, es zu tun?

Antwort

1

Mit pd.concat mit ffill()

pd.concat([df1,df2],axis=1).ffill() 
Out[388]: 
    ColumnA ColumnB ColumnC Value1 Value2 id 
0  A1  B1  C1  v1  v2 1 
1  A2  B2  C2  v1  v2 1 
2  A3  B3  C3  v1  v2 1 
3

Verwenden assign von Series erstellt von ausgewählten ersten Reihe von df2:

df3 = df1.assign(**df2.iloc[0]) 
print (df3) 
    ColumnA ColumnB ColumnC Value1 Value2 id 
0  A1  B1  C1  v1  v2 1 
1  A2  B2  C2  v1  v2 1 
2  A3  B3  C3  v1  v2 1 
+2

Dies muss einer der eleganten Anwendungen von Python und Pandas Syntax sein. – Zero

0

andere Art und Weise

In [1728]: df1.assign(k=0).merge(df2.assign(k=0), on='k').drop('k', 1) 
Out[1728]: 
    ColumnA ColumnB ColumnC Value1 Value2 id 
0  A1  B1  C1  v1  v2 1 
1  A2  B2  C2  v1  v2 1 
2  A3  B3  C3  v1  v2 1 

Wenn Sie nichthaben Siein Daten.

In [1734]: df1.join(df2).ffill() 
Out[1734]: 
    ColumnA ColumnB ColumnC Value1 Value2 id 
0  A1  B1  C1  v1  v2 1 
1  A2  B2  C2  v1  v2 1 
2  A3  B3  C3  v1  v2 1 
Verwandte Themen