代码之家  ›  专栏  ›  技术社区  ›  Dennis Golomazov

如何在数据帧中获得非零值的最大列

  •  0
  • Dennis Golomazov  · 技术社区  · 6 年前

               2017      2018      2012  2015  2014  2016
    11647  0.044795  0.000000  0.000000   0.0   0.0   0.0
    16389  0.089801  0.044900  0.000000   0.0   0.0   0.0
    16404  0.014323  0.000000  0.000000   0.0   0.04   0.0
    16407  0.052479  0.010442  0.009277   0.0   0.0   0.0
    16409  0.000000  0.000000  0.004883   0.0   0.0   5.0
    

    请注意,列没有排序。 对于每一行,我需要得到非零值的最近一年。

    11647    2017
    16389    2018
    16404    2017
    16407    2018
    16409    2016
    

    怎么做?

    3 回复  |  直到 6 年前
        1
  •  2
  •   rafaelc    6 年前

    idxmax 在排序列中

    df[sorted(df.columns, reverse=True)].ne(0).idxmax(1)
    
    11647    2017
    16389    2018
    16404    2017
    16407    2018
    16409    2016
    dtype: object
    
        2
  •  1
  •   BENY    6 年前

    使用 stack 具有 max

    df[df.ne(0)].stack().reset_index(level=1)['level_1'].max(level=0)
    Out[386]: 
    11647    2017
    16389    2018
    16404    2017
    16407    2018
    16409    2016
    Name: level_1, dtype: int64
    

    df.ne(0).mul(df.columns).max(1)
    Out[423]: 
    11647    2017.0
    16389    2018.0
    16404    2017.0
    16407    2018.0
    16409    2016.0
    dtype: float64
    
        3
  •  0
  •   Dennis Golomazov    6 年前
    df.apply(lambda row: row[row > 0].index.max(), axis=1)