0

これは、csvファイルを解析するときに時間枠ごとにアイテムをグループ化するために使用しているものです。これは正常に機能していますが、4時間30分ごとにスライスを作成したいと思います。この特定のコードは1時間ごとのスライスに対してのみ機能します。 4時間のスライス(または30mのスライス)を作成するには

tf = "%d-%b-%Y-%H"

lmb = lambda d: datetime.datetime.strptime(d["Date[G]"]+"-"+d["Time[G]"], "%d-%b-%Y-%H:%M:%S.%f").strftime(tf)

for k, g in itertools.groupby(csvReader, key = lmb):
    for i in g:
        "do something"

ありがとう!

4

1 に答える 1

1

一般的な最善のアプローチは、groupbyアイテムを適切なバケットにグループ化するタプルをキーに返すことです。

たとえば、4時間のスライスの場合:

def by_4h(d):
    dt = datetime.datetime.strptime(d["Date[G]"]+"-"+d["Time[G]"], "%d-%b-%Y-%H:%M:%S.%f")
    return (dt.year, dt.month, dt.day, dt.hour // 4)

これで、2つの時間が同じ4時間のスライス(真夜中から開始)にhour // 4ある場合、それらの時間に対して同じ結果が得られることがわかったので、そこでタプルを終了します。

または30mスライスの場合:

def by_30m(d):
    dt = datetime.datetime.strptime(d["Date[G]"]+"-"+d["Time[G]"], "%d-%b-%Y-%H:%M:%S.%f")
    return (dt.year, dt.month, dt.day, dt.hour, dt.minute // 30)

これは//Python3との互換性のために整数除算を使用していますが、Python 2.xでも機能し、整数除算が必要であることを明確にします。

于 2012-07-10T13:24:28.483 に答える