【问题标题】:Compare multiple row values比较多行值
【发布时间】:2017-03-07 08:34:22
【问题描述】:

我想将每一行的 A 值与其他列进行比较

问题更复杂,但我试图在此表中简化它:

     A    B    C  D
0  1.3  1.0  1.1  1
1  2.5  2.9  2.6  3
2  3.1  3.0  3.2  2

结果应该是这样的:

这里在索引 0 中:1.3 大于 B、C 和 D 中的值,则返回 1,否则为 0

     A    B    C  D  result
0  1.3  1.0  1.1  1       1
1  2.5  2.9  2.6  3       0
2  3.1  3.0  3.2  2       0

提前谢谢你

【问题讨论】:

    标签: python python-3.x pandas dataframe


    【解决方案1】:

    使用assign 创建新列
    使用 df.le(df.A, 0) 将列 'A' 与所有其他列进行比较
    使用all(1) 查找所有列的True 位置
    使用astype(int) 使其成为10

    df.assign(result=df.lt(df.A, 0).all(1).astype(int))
    
         A    B    C  D  result
    0  1.3  1.0  1.1  1       1
    1  2.5  2.9  2.6  3       0
    2  3.1  3.0  3.2  2       0
    

    【讨论】:

      【解决方案2】:

      您可以使用gtle 进行比较,然后使用anyall 获得至少一个Trueall Trues,最后将布尔掩码转换为int

      df['result'] = (~df[['B','C','D']].gt(df.A, axis=0).any(1)).astype(int)
      print (df)
           A    B    C  D  result
      0  1.3  1.0  1.1  1       1
      1  2.5  2.9  2.6  3       0
      2  3.1  3.0  3.2  2       0
      

      另一种解决方案:

      df['result'] = df[['B','C','D']].le(df.A, axis=0).all(1).astype(int)
      print (df)
           A    B    C  D  result
      0  1.3  1.0  1.1  1       1
      1  2.5  2.9  2.6  3       0
      2  3.1  3.0  3.2  2       0
      

      【讨论】:

        【解决方案3】:

        你可以使用idxmax:

        df['result'] = (df.idxmax(axis=1)== 'A').astype(int)
        

        输出:

            A    B    C  D  result
        0  1.3  1.0  1.1  1       1
        1  2.5  2.9  2.6  3       0
        2  3.1  3.0  3.2  2       0
        

        【讨论】:

          【解决方案4】:

          如果您知道列名,请执行以下操作:

          df['results']=(df.loc[:,'A']>df.loc[:,'B':'D'].max(axis=1)).astype(int)
          

          如果您知道想要使用列顺序,您可以这样做:

          df['results']=(df.iloc[:,0]>df.iloc[:,1:].max(axis=1)).astype(int)
          

          在您的示例中,这些将提供相同的输出。 最后的 "astype(int)" 将布尔值转换为 0/1。

          【讨论】:

            猜你喜欢
            • 2012-01-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-05-29
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多