python – 获取排序的numpy矩阵或pandas数据帧的最后一个非nan索引
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 获取排序的numpy矩阵或pandas数据帧的最后一个非nan索引,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1183字,纯文字阅读大概需要2分钟。
内容图文
![python – 获取排序的numpy矩阵或pandas数据帧的最后一个非nan索引](/upload/InfoBanner/zyjiaocheng/750/bfe7d64a48f148e08aba390aaa714e1d.jpg)
给定一个像这样的numpy数组(或pandas数据帧):
import numpy as np
a = np.array([
[1, 1, 1, 0.5, np.nan, np.nan, np.nan],
[1, 1, 1, np.nan, np.nan, np.nan, np.nan],
[1, 1, 1, 0.5, 0.25, 0.125, 0.075],
[1, 1, 1, 0.25, np.nan, np.nan, np.nan],
[1, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan],
[1, 1, 0.5, 0.5, np.nan, np.nan, np.nan]
])
我希望最有效地检索每一行中的最后一个非nan值,所以在这种情况下我会寻找一个返回这样的函数:
np.array([3,
2,
6,
3,
0,
3])
我可以尝试np.argmin(a,axis = 1) – 1,但这至少有两个不受欢迎的属性 – 对于不以nan结尾的行(交易破坏者)而言它失败并且它不会“懒惰 – 评估”并且一旦它停止已达到给定行中的最后一个非纳米值(这与“它必须是正确的”条件无关紧要).
我想有一种方法可以用np.where来做,但除了评估每一行的所有元素之外,我还看不到一种明显的优雅方??式来重新排列输出以获得每行中的最后一个索引:
>>> np.where(np.isnan(a))
(array([0, 0, 0, 1, 1, 1, 1, 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5]),
array([4, 5, 6, 3, 4, 5, 6, 4, 5, 6, 1, 2, 3, 4, 5, 6, 4, 5, 6]))
解决方法:
pandas.Series有一个last_valid_index方法:
pd.DataFrame(a.T).apply(pd.Series.last_valid_index)
Out:
0 3
1 2
2 6
3 3
4 0
5 3
dtype: int64
内容总结
以上是互联网集市为您收集整理的python – 获取排序的numpy矩阵或pandas数据帧的最后一个非nan索引全部内容,希望文章能够帮你解决python – 获取排序的numpy矩阵或pandas数据帧的最后一个非nan索引所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。