如何在两个熊猫数据框之间应用功能

时间:2019-08-02 07:17:37

标签: python pandas dataframe

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

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。例如,相乘(但我正在寻找一种通用解决方案,可以将其发送给函数)。

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

1 个答案:

答案 0 :(得分:2)

如果需要您的函数仅通过DataFrame.loc逐行传递DataFrameSeries,最后用DataFrame.fillna替换丢失的值是使用{{3}}:

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