我有这样的数据帧:
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
怎么做?
可以在排序列df中使用idxmax
df[sorted(df.columns, reverse=True)].ne(0).idxmax(1)
11647 2017
16389 2018
16404 2017
16407 2018
16409 2016
dtype: object
使用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
df.apply(lambda row: row[row > 0].index.max(), axis=1)
给出了预期的结果。