【问题标题】:How to apply a function between two pandas data frames如何在两个熊猫数据框之间应用函数
【发布时间】:2019-12-10 19:03:54
【问题描述】:

如何将自定义函数应用于两个数据框? .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

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    如果需要您的函数只传递DataFrameSeries 并使用DataFrame.loc 按行选择,最后用原始替换缺失值是使用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
    

    【讨论】:

    • 非常有帮助,应用功能让我很困惑。我也将 fillna 更改为 dropna,它似乎做了我想做的事
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-18
    • 2021-10-06
    • 2022-10-02
    • 1970-01-01
    • 2021-09-20
    • 1970-01-01
    • 2022-08-22
    相关资源
    最近更新 更多