user912830823
user912830823

Reputation: 1352

Pandas: How to append new columns to all rows in data frame

I have two data frames:

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

And looking to get df3 where all rows on df1 will have columns from df2.

  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

Currently im doing it this way:

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

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

What is the better way to do it?

Upvotes: 4

Views: 5820

Answers (3)

Zero
Zero

Reputation: 76947

Another way

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

If you don't have NaN in data.

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

Upvotes: 0

jezrael
jezrael

Reputation: 863166

Use assign by Series created by selected first row of 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

Upvotes: 4

BENY
BENY

Reputation: 323326

Using pd.concat with 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

Upvotes: 1

Related Questions