0

这是我在解析 csv 文件时用来按时间范围对项目进行分组的方法,它工作正常,但现在我想按 4h 和 30mn 创建切片,这个特定的代码只适用于按小时切片,我想创建 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键返回一个元组,将项目分组到适当的桶中。

例如,对于 4h 切片:

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)

您现在知道,如果两个时间在同一个 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)

这是使用//整数除法来兼容 Python 3,但它也适用于 Python 2.x,并清楚地表明您需要整数除法。

于 2012-07-10T13:24:28.483 回答