Home > Blockchain >  Multiplying two data frames in pandas
Multiplying two data frames in pandas

Time:08-19

I have two data frames as shown below df1 and df2. I want to create a third dataframe i.e. df as shown below. What would be the appropriate way?

df1={'id':['a','b','c'],
   'val':[1,2,3]}

df1=pd.DataFrame(df)
df1
 id  val
0  a    1
1  b    2
2  c    3


df2={'yr':['2010','2011','2012'],
   'val':[4,5,6]}

df2=pd.DataFrame(df2)
df2
    yr  val
0  2010    4
1  2011    5
2  2012    6

df={'id':['a','b','c'],
   'val':[1,2,3],
    '2010':[4,8,12],
    '2011':[5,10,15],
    '2012':[6,12,18]}


df=pd.DataFrame(df)
df

  id  val  2010  2011  2012
0  a    1     4     5     6
1  b    2     8    10    12
2  c    3    12    15    18

I can basically convert df1 and df2 as 1 by n matrices and get n by n result and assign it back to the df1. But is there any easy pandas way?

CodePudding user response:

This works for me:

df2 = df2.T
new_df = pd.DataFrame(np.outer(df1['val'],df2.iloc[1:]))
df = pd.concat([df1, new_df], axis=1)
df.columns = ['id', 'val', '2010', '2011', '2012']
df

The output I get:

    id  val 2010    2011    2012
0   a   1      4       5       6
1   b   2      8      10      12
2   c   3     12      15      18

CodePudding user response:

Your question is a bit vague. But I suppose you want to do something like that:

df = pd.concat([df1, df2], axis=1)

CodePudding user response:

df1.join(df1.val.apply(lambda x: x * df2.set_index('yr').val))
  • Related