如何在熊猫数据框中获取具有非零值的max列

时间:2018-09-07 16:51:11

标签: python pandas dataframe apply

我有一个这样的数据框:

           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 个答案:

答案 0 :(得分:2)

可以在已排序的df列中使用idxmax

df[sorted(df.columns, reverse=True)].ne(0).idxmax(1)

11647    2017
16389    2018
16404    2017
16407    2018
16409    2016
dtype: object

答案 1 :(得分:1)

stackmax一起使用

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

答案 2 :(得分:0)

df.apply(lambda row: row[row > 0].index.max(), axis=1)

达到预期的结果。