我有以下格式的数据框(df
):
SERV_OR_IOR_ID IMP_START_TIME IMP_CLR_TIME TIME_BIN
0 -1447310116 23:59:32.873000 00:11:28.755000
1 1673545041 00:00:09.182000 00:01:06.912000
2 -743717696 23:59:57.312000 00:00:32.428000
3 -746373244 23:59:57.915000 00:05:33.232000
我将一天中的24小时分成时间箱'第30分钟,所以第0个时间区间为00:00-00:30,首先是00:30-01:00,依此类推。发布这个,我想在'TIME_BIN'
列中指定一个值对于每一行,取决于'IMP_START_TIME'
落入的时间窗口。
例如 :
对于行'1'
,我会指定值'0'
,因为它落在时间窗'00:00'-00:30
中。
为此,我写了以下代码:
interval = dt.timedelta(minutes=30)
start = dt.time(0,0,0)
grid =[(dt.datetime.combine(dt.date(1,1,1),start)+n*interval).time() for n in range(48)]
for j in range(len(df)):
for i in range(0,47):
if df.ix[j,1] <grid[i+1] and df.ix[j,1] > grid[i]:
df.ix[j,3] = i
elif df.ix[j,1] > grid[47]:
df.ix[j,3] = 47
由于嵌套for循环,此代码需要花费大量时间才能运行。是否有更有效的方法来做同样的事情?
答案 0 :(得分:1)
这应该更快:
index = pd.date_range('1/1/2000', periods=48, freq='30T').time
index = {v: i for i, v in enumerate(index)}
df['TIME_BIN'] = pd.to_datetime(df['IMP_CLR_TIME']).dt.floor('30T').dt.time.map(index)
答案 1 :(得分:1)
您可以计算所需的bin,而不是查找。它会节省很多:
Condition="Exists(@(IntermediateAssembly))"