我在pytables中有一个数据集,看起来像

class myData(IsDescription):
    date = StringCol(16)
    item = Int32Col()

我在同一日期有多个项目,例如:
'2010-01-01', 5
'2010-01-01', 6
'2010-01-02', 7
'2010-01-02', 8

有没有一种方法可以遍历唯一的日期,然后遍历日期中的项我的意思是
for date in DATE
    print date
     for ITEM
         print item

最佳答案

我不熟悉pytables的内部工作原理(因此这可能与您要查找的内容不一致),但是groupby模块中的itertools函数在这些情况下非常有用(注意下面的排序步骤-在这种情况下,为了让groupby对具有相同日期的所有项进行分组,这一点非常重要。有关更多信息,请参见here

In [1]: from itertools import groupby

In [2]: from operator import attrgetter

In [3]: class myData(object):
    def __init__(self, date, item):
        self.date = date
        self.item = item
   ...:

In [4]: l = [myData('2012-01-01', 'thing'), myData('2012-01-01', 'another thing'), myData('2013-01-01', 'and another')]

In [5]: l_sorted = sorted(l, key=attrgetter('date'))

In [6]: for date, my_objects in groupby(l_sorted, key=attrgetter('date')):
   ...:     print date
   ...:     for obj in my_objects:
   ...:         print obj.item
   ...:
2012-01-01
thing
another thing
2013-01-01
and another

这里的基本模式是获取包含要分组的对象的列表/容器。然后,根据稍后要分组的属性对该列表进行排序(在本例中为date)。然后将该排序列表传递给groupby函数,该函数将在每次迭代中发出两个值-一个表示分组所依据的值的key(因此这里是每个组的date)和一个包含共享同一group键的所有对象的date迭代器。然后可以遍历该组,拉出每个对象的item属性。

关于python - Pytables。如何获得唯一值的迭代?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14552169/

10-10 02:33