我有一个这样的清单:
first_list = [[ 1. , 45.4, 9.1],
[ 2. , 45.5, 9.1],
[ 2. , 45.4, 9.2],
[ 2. , 45.4, 9.2],
[ 3. , 45.4, 9.1],
[ 3. , 45.4, 9.1],
[ 3. , 45.4, 9.1] ]我想使用folio函数HeatMapWithTime,为此,我需要根据每个子列表(1.、2.、3. ecc)的第一项对上面的数据进行分组:
new_list = [ [ [45.4, 9.1] ], # All coords for 1.
[ [45.5, 9.1], [45.4, 9.2], [45.4, 9.2] ], # All coords for 2.
[ [45.4, 9.1], [45.4, 9.1], [45.4, 9.2] ] ] # All coords for 3.我怎么能这么做?
发布于 2020-01-29 14:38:08
使用pandas的一种解决方案是处理复杂数据格式时的明智选择:
import pandas as pd
pd.DataFrame(first_list).set_index(0).groupby(df.index).apply(lambda x: x.values.tolist()).tolist()
#->
[[[45.4, 9.1]],
[[45.5, 9.1], [45.4, 9.2], [45.4, 9.2]],
[[45.4, 9.1], [45.4, 9.1], [45.4, 9.1]]]发布于 2020-01-29 14:17:03
假设列表是按第一个元素排序的,正如看起来的那样,您可以使用itertools.groupby
from itertools import groupby
from operator import itemgetter
[[i[1:] for i in v] for k,v in groupby(first_list, itemgetter(0))]
#[[[45.4, 9.1]],
# [[45.5, 9.1], [45.4, 9.2], [45.4, 9.2]],
# [[45.4, 9.1], [45.4, 9.1], [45.4, 9.1]]]发布于 2020-01-29 14:34:15
您可以在字典中收集所有坐标:
res = {}
for entry in first_list:
res.setdefault(entry[0], []).append(entry[1:])这给了你:
>>> res
{1.0: [[45.4, 9.1]],
2.0: [[45.5, 9.1], [45.4, 9.2], [45.4, 9.2]],
3.0: [[45.4, 9.1], [45.4, 9.1], [45.4, 9.1]]}如果您的列表已经排序,则将这些值转换为一个列表(仅限Python):
>>> list(res.values())
[[[45.4, 9.1]],
[[45.5, 9.1], [45.4, 9.2], [45.4, 9.2]],
[[45.4, 9.1], [45.4, 9.1], [45.4, 9.1]]]否则,您需要首先对它们进行排序:
>>> [res[key] for key in sorted(res.keys())]
[[[45.4, 9.1]],
[[45.5, 9.1], [45.4, 9.2], [45.4, 9.2]],
[[45.4, 9.1], [45.4, 9.1], [45.4, 9.1]]]https://stackoverflow.com/questions/59968986
复制相似问题