3

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
4

1 に答える 1

6

私はPytablesの内部動作に精通していません(したがって、これはあなたが探しているものと一致していない可能性があります)がgroupby、モジュールの関数はitertoolsこれらのタイプの状況で非常に役立ちます(以下のソート手順に注意してください-これこの場合groupby、同じ日付のすべてのアイテムをグループ化するために重要です。詳細については、ここを参照してください。):

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関数に渡します。関数は、各反復で2つの値を出力します。keyこれは、グループ化した値を表し(ここではdate、各グループの値になります)、group共有するすべてのオブジェクトを含むイテレーターです。その同じdateキー。item次に、そのグループを反復処理して、各オブジェクトの属性を引き出すことができます。

于 2013-01-27T21:05:49.000 に答える