【问题标题】:Multiply two columns based on a condition in a Pandas Dataframe?根据熊猫数据框中的条件将两列相乘?
【发布时间】:2021-06-18 00:27:35
【问题描述】:

我正在尝试将 pandas 数据框中的两列相乘,但我很难做到这一点。 当 y 大于 0 时,我需要将 x 列乘以 y 列。否则,x 需要保持原样

最终结果应如下表所示:

【问题讨论】:

    标签: python pandas numpy conditional-statements


    【解决方案1】:

    试试这个:

    df['x'] = df['x'].where(df['y'].eq(0),df['x'].mul(df['y']))
    

    【讨论】:

      【解决方案2】:

      也许您可以为此使用 df.apply。

      >>> df.x = df.apply(lambda var: var.x * var.y if var.y > 0 else var.x, axis=1)
      >>> df
             x     y
      0  150.0  0.50
      1  187.5  0.75
      2  460.0  1.00
      3  500.0  0.00
      4   30.0  0.00
      

      【讨论】:

        【解决方案3】:

        让我们试试

        df['new'] = df.x*df.y.replace(0,1)
        Out[346]: 
        0    150.0
        1    187.5
        2    460.0
        3    500.0
        4     30.0
        dtype: float64
        

        【讨论】:

          【解决方案4】:

          在 y 或 y 的副本中将 0 替换为 1 怎么样?

          y[y == 0] = 1
          
          return x*y
          

          【讨论】:

            【解决方案5】:

            您可以使用apply 使用 lambda 进行过滤,然后按您的 x 列进行多重过滤:

            In [1]: import pandas as pd
               ...: 
               ...: df = pd.DataFrame({'x':[300,250,460,500,30],'y':[.5,.75,1,0,0]})
               ...: 
               ...: df['x'] = df['y'].apply(lambda z: z if z > 0 else 1) * df['x']
               ...: print(df)
                   x     y
            0  150.0  0.50
            1  187.5  0.75
            2  460.0  1.00
            3  500.0  0.00
            4   30.0  0.00
            

            【讨论】:

              【解决方案6】:

              有很多方法可以做到这一点。这是其中之一。

              import pandas as pd
              df = pd.DataFrame({"x": [300, 250, 460, 500, 30],
                            "y": [0.5, .75, 1, 0, 0]})
              df2 = df.copy()
              df2["x"] = [df["x"][i]*df["y"][i] if df["y"][i]>0 else df["x"][i] for i in range(len(df))]
              

              【讨论】:

                【解决方案7】:

                试试熊猫mask:

                df['x'] = df['x'].mask(df.y.gt(0), df['x']*df['y'])
                
                In [53]: df
                Out[53]: 
                       x     y
                0  150.0  0.50
                1  187.5  0.75
                2  460.0  1.00
                3  500.0  0.00
                4   30.0  0.00
                

                【讨论】:

                  猜你喜欢
                  • 2020-04-06
                  • 1970-01-01
                  • 1970-01-01
                  • 2018-01-24
                  • 2021-09-20
                  • 1970-01-01
                  • 2023-02-02
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多