如何在两个 pandas 数据框之间应用功能 [英] How to apply a function between two pandas data frames

查看:48
本文介绍了如何在两个 pandas 数据框之间应用功能的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何将自定义功能应用于两个数据帧? .apply方法似乎在给定数据帧的行或列上进行迭代,但是我不确定如何一次在两个数据帧上使用它.例如,

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  

通常,df1到df2的映射函数如何创建新的df3.例如,相乘(但是我正在寻找一种通用解决方案,可以将其发送给函数).

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

和df3将是

      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

推荐答案

如果需要,您的函数仅通过

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

详细信息:

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

这篇关于如何在两个 pandas 数据框之间应用功能的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆