我有一个这样的数据框:
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
该怎么做?
答案 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)
将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
答案 2 :(得分:0)
df.apply(lambda row: row[row > 0].index.max(), axis=1)
达到预期的结果。