代码之家  ›  专栏  ›  技术社区  ›  Skywalker

如何使pandas数据帧中的每列1和其他0的最大值?

  •  0
  • Skywalker  · 技术社区  · 8 年前

    我有一个带浮点值的数据帧。我想将列1和列0中所有其他列的最大值设为。

    例子:

    1 2 3
    
    4 5 1
    
    7 0 1
    

    变成

    0 0 1
    
    0 1 0
    
    1 0 0
    

    假设还存在头和索引。

    如何在这里使用df.apply()方法?

    2 回复  |  直到 8 年前
        1
  •  3
  •   cs95 abhishek58g    8 年前

    最佳使用方法 df.apply 就是不用 DF.应用 .

    (df == df.max()).astype(int)
    
       0  1  2
    0  0  0  1
    1  0  1  0
    2  1  0  0
    
        2
  •  1
  •   nimrodz    8 年前

    你可以试试 pd.get_dummies(df.idxmax(1))

    df.idxmax(1) 为每一行返回max列的pandas.series。

    df
    Out[204]: 
       A  B  C
    1  1  2  3
    2  4  5  1
    3  7  0  1
    
    df.idxmax(1)
    Out[205]: 
    1    C
    2    B
    3    A
    

    然后 pd.get_dummies() 将根据最大值系列创建虚拟数据帧

    pd.get_dummies(df.idxmax(1))
    Out[206]: 
       A  B  C
    1  0  0  1
    2  0  1  0
    3  1  0  0