2017-09-04 45 views
-2

的过滤列表构建数据帧我有两个列表从元组

kuid -> ['LOdRTFfn', 'Lckq4LkU', 'LcsYHodm'] 

和NN是元组的列表,其中所述第一元件是kuid和其他元件的指数法的列表是一个数组值

NN -> [([0, 1, 2], [0.0, 1.2, 1.4]), ([1, 0, 2], [0.0, 1.4, 1.4]), ([2, 0, 1], [0.0, 1.1, 1.4])] 

我想只保留其中的值小于1.3,例如索引:

[([0, 1], [0.0, 1.2]), ([1], [0.0]), ([2, 0], [0.0, 1.1])] 

,然后得到kuid的正确值,并建立一个数据帧:

kuid  la     lametric     
0 LOdRTFfn [LOdRTFfn, Lckq4LkU] [0.0, 1.2] 
1 Lckq4LkU [Lckq4LkU]   [0.0] 
2 LcsYHodm [LcsYHodm, LOdRTFfn] [0.0, 1.1] 

是否有可能与内涵的列表(或其他快速解决方案)要做到这一点,避免循环?该阵列可以是非常大的....

谢谢

回答

0

这里有一种方法

In [1789]: df = pd.DataFrame(dict(kuid=kuid, NN=[np.array(x) for x in NN])) 

In [1790]: df['lametric'] = df.NN.apply(lambda x: x[1][x[1] < 1.3]) 

In [1791]: df['la'] = df.NN.apply(lambda x: [kuid[int(i)] for i in x[0][x[1] < 1.3]]) 

In [1792]: df 
Out[1792]: 
            NN  kuid lametric \ 
0 [[0.0, 1.0, 2.0], [0.0, 1.2, 1.4]] LOdRTFfn [0.0, 1.2] 
1 [[1.0, 0.0, 2.0], [0.0, 1.4, 1.4]] Lckq4LkU  [0.0] 
2 [[2.0, 0.0, 1.0], [0.0, 1.1, 1.4]] LcsYHodm [0.0, 1.1] 

        la 
0 [LOdRTFfn, Lckq4LkU] 
1   [Lckq4LkU] 
2 [LcsYHodm, LOdRTFfn]