我有一个二维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"]
最后的数组仍然是相同的。
同样,如果数组包含的行(即行键)在键中丢失,那么该行也将被排除在结果数组之外。
- 编辑2:**从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']]
3条答案
按热度按时间sg2wtvxw1#
下面是一些可能的解决方案。使用numpy:
使用Pandas:
对于这两种情况,如果
sample_ids = ["aaa", "bbb", "ccc", "ddd", "eee"]
,则输出将相同。如果
sample_ids = ["ddd", "aaa", "bbb"]
,则输出为:9fkzdhlc2#
灵感来自于@Nick的第一种方法:
如果您希望能够处理缺失值(首先使用
-1
作为默认键对其进行排序,如果您希望最后使用np.inf
):输出:
7kqas0il3#
使用
numpy.broadcasting
的可能解决方案:使用
list comprehension
的另一个可能的解决方案是:输出: