首页 > 解决方案 > 获取每个索引的最后一个有效值的列名

问题描述

我有一个这样的数据框 -

   A    B    C
0  1  NaN  3.0
1  2  3.0  NaN
2  2  NaN  NaN
3  NaN NaN 53 

我需要找到每个索引的最后一个有效值的列名。例如对于上面的数据框,我想得到这样的输出。

['C','B','A','C]

我确实尝试获取列名,但只能通过使用iteritems()数据帧的转置来获取值。此外,由于它循环遍历数据框,我发现它不是非常理想的。请在下面找到我的方法

l_val = []
for idx, row in df.T.iteritems():
    last_val = None
    for x in row:
        if not pd.isna(x):
            last_val = x
    l_val.append(last_val)

回报 -

[3.0, 3.0, 2.0]

我尝试了很多搜索,但大多数答案都提到了last_valid_index方法,该方法将返回列中的最后一个有效索引,如果我可以用于我的问题,我不会得到。有人可以建议我任何快速的方法来做到这一点。

标签: pythonpandasnumpy

解决方案


你可以做:

df.idxmax(axis=1).to_list()

输出:

['C', 'B', 'A', 'C']

编辑:

对于我上面展示的解决方案,您将获得最大值的索引。但是,您也可以有一个数据框,其中第一列中的值大于最后列中的值。然后我建议使用下面的解决方案来获取最后一个有效值的索引:

df.T.apply(pd.Series.last_valid_index).to_list()

输出:

['C', 'B', 'A', 'C']

推荐阅读