【问题标题】:Multiply two dataframes condition on another column在另一列上乘以两个数据框条件
【发布时间】:2020-12-22 07:40:42
【问题描述】:

我有两个数据框:df1 和 df2。

df1

Index date       | X1 | X2 
 0    01-01-2020 | H  | 10   
 1    01-02-2020 | H  | 30   
 2    01-03-2020 | Y  | 15    
 3    01-04-2020 | Y  | 20  

df2

Index | X1 | X2 
 0    | H  | 5   
 1    | Y  | 10 

当 X1 列上的值匹配时,我想将 df1 和 df2 相乘。

想要的结果:

Index date       | X1 | X2 
 0    01-01-2020 | H  | 50   
 1    01-02-2020 | H  | 150   
 2    01-03-2020 | Y  | 150    
 3    01-04-2020 | Y  | 200 

【问题讨论】:

    标签: pandas dataframe


    【解决方案1】:

    使用df.mergeprod(axis=1)

    df1['X2']=df1.merge(df2, how='left', on='X1').filter(like='_').prod(axis=1)
    
    
    
        date      X1   X2
    0  01-01-2020  H   50
    1  01-02-2020  H  150
    2  01-03-2020  Y  150
    3  01-04-2020  Y  200
    

    【讨论】:

      【解决方案2】:

      使用Series.mapX1 匹配,然后与X2 相乘:

      df1['X2'] *= df1['X1'].map(df2.set_index('X1')['X2'])
      print (df1)
               date X1   X2
      0  01-01-2020  H   50
      1  01-02-2020  H  150
      2  01-03-2020  Y  150
      3  01-04-2020  Y  200
      

      或将DataFrame.merge 与左连接一起使用:

      df1['X2'] *= df2.merge(df1, on='X1', how='left')['X2_x']
      print (df1)
               date X1   X2
      0  01-01-2020  H   50
      1  01-02-2020  H  150
      2  01-03-2020  Y  150
      3  01-04-2020  Y  200
      

      【讨论】:

        【解决方案3】:

        您可以在两个数据帧上设置索引并将数组分配给df

        df["X2"] = df.set_index("X1").X2.mul(df1.set_index("X1").X2).array
        
        df
        
                date    X1  X2
        0   01-01-2020  H   50
        1   01-02-2020  H   150
        2   01-03-2020  Y   150
        3   01-04-2020  Y   200
        

        【讨论】:

          猜你喜欢
          • 2019-03-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-23
          • 1970-01-01
          相关资源
          最近更新 更多