Python group和splice:拼接从itertools.groupby返回的结果

时间:2013-07-10 03:06:28

标签: python numpy group-by splice

我正在尝试使用numpy genfromtxt将csv文件读入结构化数组。我计划对其进行排序,然后使用groupby根据其中一列的字符串值将文件分成组。最后,我将拼接每个组中的列以进行其他处理。

这是一个小例子,我希望为每个组返回一个特定的列。

import numpy as np
from itertools import groupby

food1 = [[" vegetable", "tomato"], [" vegetable", "spinach"], [" fruit", "watermelon"], [" fruit", "grapes"], [" meat", "beef"]]

for key, group in groupby(food1, lambda x: x[0]):
    print key   
    group[:1]
# In the line above, TypeError: 'itertools._grouper' object is unsubscriptable, I have tried it with  food1 or food2
    for thing in group:     
        print key + ": "  + thing[1];       
    print " "

我想要的输出是返回第二列的几个数组va;按第一列的值分组,

所以 蔬菜:[“番茄”,“菠菜”], 水果:[“西瓜”,“葡萄”] ......等。

我试图从groupby拼接组返回,但因为它是一个迭代器,我会得到TypeError:'itertools._grouper'对象是unsubscriptable。

我知道我可以拼接从genfromtxt加载的数据,但它是首先进行分组然后拼接的组合,这给我带来了麻烦。

data = np.genfromtxt("file.txt", delimiter=',', skiprows=3)
# splicing a column from the ndarray read from the csv file
column2 = data[:,2];

任何其他想法我怎么能完成这个组然后拼接?

感谢。

1 个答案:

答案 0 :(得分:2)

我认为你正在尝试这样做:

from itertools import groupby

food1 = [[" vegetable", "tomato"], [" vegetable", "spinach"], [" fruit", "watermelon"], [" fruit", "grapes"], [" meat", "beef"]]

data={}
for key, group in groupby(sorted(food1), key=lambda x: x[0]):
    data[key.strip()]=[v[1] for v in group]
然后

数据是:

{'vegetable': ['tomato', 'spinach'], 
 'fruit': ['watermelon', 'grapes'], 
 'meat': ['beef']}