按列值

时间:2017-12-30 19:34:09

标签: python dictionary optimization data-science

我的数据是python词典列表,每个词典代表数据中的一行,并希望将其中的几个组合成一个字典。

我需要通过单个列中的公共值来组合它们,请注意要合并的字典可能包含也可能不包含类似的列,值应该连接在一起,而不是被破坏。

这是一个例子(在'a'列中按值组合dicts):

data = [{ 'a':0, 'b':10, 'c':20 }
{ 'a':2, 'd':30, 'e':40 }
{ 'a':0, 'b':50, 'c':60 }
{ 'a':1, 'd':70, 'c':80 }
{ 'a':1, 'b':90, 'e':100 }]

所需的输出是:

new_data = [{ 'a':0, 'b':[10,50], 'c':[20,60] }
{ 'a':1, 'd':[70], 'c':[80], 'b':[90], 'e':[100] }
{ 'a':2, 'd':[30], 'e':[40] }]

我有一个可以实现此目的的简单功能,但需要更快的方法(数据有大约1,000,000行和20列)。我找到想要合并的词典的方法非常昂贵。

这是我遇到计算时间问题的地方:

unique_idx, locations = [], {}
    for i, row in enumerate(data):
        _id = row['a']
        if _id not in unique_idx:
            unique_idx.append(_id)
            locations[_id] = [i]
        else:
            locations[_id].append(i)

grouped_data = [data[loc] for loc in locations.values()]

我需要一种更快的方法来收集在一列中包含相同值的词典。理想情况下,我想要一个普通python的快速方法,但如果这可以简单地用一个很好的pandas DataFrame完成。

0 个答案:

没有答案