2

we have the following two dataframes respectively.

Dataframe 1:
id =[30,30]
month =[1,3]
less_data =['pravin','shashi']

df = pd.DataFrame(list(zip(id,month,less_data)),columns =['id','month','less_data'])

Dataframe 2:
id =[30,30]
month =[1,2]
less_data =['amol','pinak']


df2 = pd.DataFrame(list(zip(id,month,less_data)),columns =['id','month','zero_data'])

and expected output:

id  month   less_data   zero_data
30  1       pravin      amol
30  2                   pinak
30  3       shashi  

How can I use pd.concat to achieve this or suggest better solution for the same

Amol
  • 336
  • 3
  • 5
  • 17

3 Answers3

2

use pd.concat:

dfn = pd.concat([
           df.set_index(['id','month']),
          df2.set_index(['id','month'])
        ], axis = 1).reset_index()
Ferris
  • 5,325
  • 1
  • 14
  • 23
1

You can do an outer join:

df.join(df2.set_index(['id', 'month']), how='outer', on=['id', 'month'])
Michael Szczesny
  • 4,911
  • 5
  • 15
  • 32
Baran Karakus
  • 193
  • 1
  • 7
1

You can use pd.merge on month and id

import pandas as pd
import numpy as np

id =[30,30]
month =[1,3]
less_data =['pravin','shashi']

df = pd.DataFrame(list(zip(id,month,less_data)),columns =['id','month','less_data'])

id =[30,30]
month =[1,2]
less_data =['amol','pinak']


df2 = pd.DataFrame(list(zip(id,month,less_data)),columns =['id','month','zero_data'])

##### Merge can be thought of joins in SQL
>>> df_merge = pd.merge(df,df2,on=['id','month'],how='outer')
>>> df_merge
   id  month less_data zero_data
0  30      1    pravin      amol
1  30      3    shashi       NaN
2  30      2       NaN     pinak
Vaebhav
  • 4,672
  • 1
  • 13
  • 33