2017-07-18 9 views
1

我有一个数据列表,看起来像这里缩短的一块数据。如何比较多个列表的第一个元素,并在相同的情况下追加到新列表中?

[[743, 5043.0, 'N/A', 19.40393776, 7.18, 15.487], [744, 6117.0, 'N/A', 19.22138894, 49.29, 15.341], [745, 5152.0, 'N/A', 16.46983774, 7.94, 15.788], [746, 4856.0, 1.5936507936507938, 9.27358173, 2.47, 15.302], [747, 4537.0, 1.0317880794701988, 6.02930329, 2.85, 15.784], [748, 4989.0, 'N/A', 2.696370652, 1.58, 15.269], [749, 5185.0, 0.8675585284280938, 5.349553819, 2.55, 15.416], [749, 5185.0, 'N/A', 3.94105221, 1.7, 15.416], [749, 5185.0, 'N/A', 8.10904807, 1.3, 15.416]] 

现在我有一个列表清单,第一个元素表示开普勒兴趣对象编号。我对数据进行排序,以便按照其第一个元素的顺序显示列表。我的目标是创建一个列表清单,其中所有具有匹配的第一个元素的列表一起放入列表中。例如,有三个列表749应该放在一个列表中。我努力创建一个遍历我所有列表的程序,并将第一个元素与未知数量的其他第一个元素进行比较。什么是最简单的方法来做到这一点?

目标:

[[[743, 5043.0, 'N/A', 19.40393776, 7.18, 15.487]], [[744, 6117.0, 'N/A', 19.22138894, 49.29, 15.341]], [[745, 5152.0, 'N/A', 16.46983774, 7.94, 15.788]], [[746, 4856.0, 1.5936507936507938, 9.27358173, 2.47, 15.302]], [[747, 4537.0, 1.0317880794701988, 6.02930329, 2.85, 15.784]], [[748, 4989.0, 'N/A', 2.696370652, 1.58, 15.269]], [[749, 5185.0, 0.8675585284280938, 5.349553819, 2.55, 15.416], [749, 5185.0, 'N/A', 3.94105221, 1.7, 15.416], [749, 5185.0, 'N/A', 8.10904807, 1.3, 15.416]]] 

回答

0

我认为使用名单列表转换成大熊猫数据帧是一个很好的路要走:我相信这是格式化,并分组

import pandas as pd 
x = pd.DataFrame([[743, 5043.0, 'N/A', 19.40393776, 7.18, 15.487], [744, 6117.0, 'N/A', 19.22138894, 49.29, 15.341], [745, 5152.0, 'N/A', 16.46983774, 7.94, 15.788], [746, 4856.0, 1.5936507936507938, 9.27358173, 2.47, 15.302], [747, 4537.0, 1.0317880794701988, 6.02930329, 2.85, 15.784], [748, 4989.0, 'N/A', 2.696370652, 1.58, 15.269], [749, 5185.0, 0.8675585284280938, 5.349553819, 2.55, 15.416], [749, 5185.0, 'N/A', 3.94105221, 1.7, 15.416], [749, 5185.0, 'N/A', 8.10904807, 1.3, 15.416]]) 
y = x.groupby(0).apply(lambda z: list(z.values)) 
Goal = [[list(z) for z in y[idx]] for idx in y.index] 

,你描述的方式。

+1

谢谢你,那正是我所需要的。 –

0

如果您想在Python中使用内置功能,您可以使用字典。

from collections import OrderedDict 

l = [[743, 5043.0, 'N/A', 19.40393776, 7.18, 15.487], [744, 6117.0, 'N/A', 19.22138894, 49.29, 15.341], [745, 5152.0, 'N/A', 16.46983774, 7.94, 15.788], [746, 4856.0, 1.5936507936507938, 9.27358173, 2.47, 15.302], [747, 4537.0, 1.0317880794701988, 6.02930329, 2.85, 15.784], [748, 4989.0, 'N/A', 2.696370652, 1.58, 15.269], [749, 5185.0, 0.8675585284280938, 5.349553819, 2.55, 15.416], [749, 5185.0, 'N/A', 3.94105221, 1.7, 15.416], [749, 5185.0, 'N/A', 8.10904807, 1.3, 15.416]] 
d = OrderedDict() 
for inner in l: 
    if inner[0] in d: 
     d[inner[0]].append(inner) 
    else: 
     d[inner[0]] = [inner] 

list(d.values()) 

我使用OrderedDict所以它保存原始项目的顺序。

+0

谢谢,很高兴知道! –

相关问题