user-2147482637
user-2147482637

Reputation: 2163

How to apply a function between two pandas data frames

How can a custom function be applied to two data frames? The .apply method seems to iterate over rows or columns of a given dataframe, but I am not sure how to use this over two data frames at once. For example,

df1

      m1          m2        
       x     y     x     y    z 
0 0  10.0  12.0  16.0  17.0   9.0
  0  10.0  13.0  15.0  12.0   4.0
1 0  11.0  14.0  14.0  11.0   5.0
  1   3.0  14.0  12.0  10.0   9.0

df2

     m1          m2        
      x     y     x     y    
0   0.5    0.1    1     0  

In general, how can a mapping function of df1 to df2 make a new df3. For example, multiply (but I am looking for a generalized solution where I can just send to a function).

def custFunc(d1,d2):
    return (d1 * d2) - d2

df1.apply(lambda x: custFunc(x,df2[0]),axis=1) 
#df2[0] meaning it is explicitly first row

and a df3 would be

      m1          m2        
       x     y     x     y    z 
0 0   5.5   1.3  16.0   0.0   9.0
  0   5.5   1.4  15.0   0.0   4.0
1 0   6.0   1.5  14.0   0.0   5.0
  1   2.0   1.5  12.0   0.0   9.0

Upvotes: 2

Views: 1887

Answers (1)

jezrael
jezrael

Reputation: 862611

If need your function only pass DataFrame and Series with seelecting by row with DataFrame.loc, last for replace missing values by original is use DataFrame.fillna:

def custFunc(d1,d2):
    return (d1 * d2) - d2

df = custFunc(df1, df2.loc[0]).fillna(df1)
print (df)
      m1         m2          
       x    y     x    y    z
0 0  4.5  1.1  15.0  0.0  9.0
  0  4.5  1.2  14.0  0.0  4.0
1 0  5.0  1.3  13.0  0.0  5.0
  1  1.0  1.3  11.0  0.0  9.0

Detail:

print (df2.loc[0])
m1  x    0.5
    y    0.1
m2  x    1.0
    y    0.0
Name: 0, dtype: float64

Upvotes: 2

Related Questions