如何基于列表对二维numpy对象数组进行排序
按指定列表排序Numpy二维数组并处理缺失项
问题描述
我有一个二维Numpy对象数组:
aa = np.array([["aaa","05","1","a"], ["ccc","30","2","v"], ["ddd","50","2","v"], ["bbb","10","1","v"]])
同时有一个指定顺序的列表:
sample_ids = ["aaa", "bbb", "ccc", "ddd"]
需要基于这个列表对Numpy数组进行排序,得到如下结果:
[["aaa","05","1","a"], ["bbb","10","1","v"], ["ccc","30","2","v"], ["ddd","50","2","v"]]
补充说明
- 若
sample_ids中包含数组里没有的键,结果数组不会添加这些缺失键对应的空行。例如当sample_ids = ["aaa", "bbb", "ccc", "ddd", "eee"]时,最终结果仍和上述示例一致。 - 若数组中存在
sample_ids里没有的行,该行会被直接排除在结果数组之外。
实现代码及结果
基于Nick的思路,我编写了处理缺失键情况的代码:
sample_ids2 = ["aaa", "bbb", "eee", "ccc", "ddd"] idxs = [] for i,v in enumerate(sample_ids2): if str(list(aa.T[0])).find(v) != -1: k = list(aa.T[0]).index(v) idxs.append(k) else: print(v + " was not found!!!") print(aa[idxs])
运行后输出:
[['aaa' '05' '1' 'a'] ['bbb' '10' '1' 'v'] ['ccc' '30' '2' 'v'] ['ddd' '50' '2' 'v']]
内容的提问来源于stack exchange,提问作者julio514
相关产品推荐
相关产品推荐

