python - 获取每个索引的最后一个有效值的列名
问题描述
我有一个这样的数据框 -
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
方法,该方法将返回列中的最后一个有效索引,如果我可以用于我的问题,我不会得到。有人可以建议我任何快速的方法来做到这一点。
解决方案
你可以做:
df.idxmax(axis=1).to_list()
输出:
['C', 'B', 'A', 'C']
编辑:
对于我上面展示的解决方案,您将获得最大值的索引。但是,您也可以有一个数据框,其中第一列中的值大于最后列中的值。然后我建议使用下面的解决方案来获取最后一个有效值的索引:
df.T.apply(pd.Series.last_valid_index).to_list()
输出:
['C', 'B', 'A', 'C']
推荐阅读
- c# - 从正常的 try/catch 中抛出自定义异常
- c# - 按季度的周分组日期
- android - 如何阻止子 Linearlayout 与父 Linearlayout 圆角重叠?
- java - HMS核心地图套件,地图加载但不渲染
- c++ - 为什么即使使用 -L 和 -I 命令,目标文件也没有与 allegro 库链接?
- laravel - 为什么不能在 laravel 7 中创建新的 vue 组件?
- java - 无法连接到 Solace
- javascript - 如何将节点 js(commonjs) 中的变量导出到普通 javascript(vanilla js)?
- ruby-on-rails - 使用 find_by 加载 Ruby on Rails
- node.js - 请求 url 显示无效的 api