如何在pandas数据帧中获取具有非零值的最大列

问题描述 投票:0回答:3

我有这样的数据帧:

           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

怎么做?

python pandas dataframe apply
3个回答
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
投票

使用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

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

给出了预期的结果。

© www.soinside.com 2019 - 2024. All rights reserved.