2017-12-03 2 views
0

본질적으로 각 랩에 자체 경과 시간이있는 일련의 랩 인 데이터가 있지만 전체 경과 시간을 계산하려고합니다. 반복되는 시계열 샘플 (랩)에서 경과 시간을 계산합니다.

다음은 유사한 데이터가 일부 코드입니다 :

lap laptime timediff elapsed 
0  1  1  NaN  1 
1  1  2  1.0  2 
2  1  3  1.0  3 
3  1  4  1.0  4 
4  1  5  1.0  5 
5  2  1  -4.0  6 
6  2  2  1.0  7 
7  2  3  1.0  8 
8  2  4  1.0  9 
9  2  5  1.0  10 
10 3  1  -4.0  11 
11 3  2  1.0  12 
12 3  3  1.0  13 
13 3  4  1.0  14 
14 3  5  1.0  15 

경과 시간은 실제로 계산해야 할 것입니다 :

import pandas as pd 
import numpy as np 
laptime = pd.Series([1,2,3,4,5,1,2,3,4,5,1,2,3,4,5]) 
lap = pd.Series([1,1,1,1,1,2,2,2,2,2,3,3,3,3,3]) 
timeblocks = pd.DataFrame({'laptime': laptime, 'lap': lap}) 
timeblocks['timediff'] = timeblocks.laptime.diff() 
timeblocks['elapsed'] = 
pd.Series([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]) 
timeblocks 

결과 데이터는 것 같습니다. 나는 시간 미분과 cumsum으로 어 지르지의 다양한 형태를 시도했지만, 좀 붙어있다.

실제 세계의 데이터가 더 다음과 같습니다 :

실제 데이터의 경우
113.81201171875 1 
113.86206054688 1 
113.912109375 1 
113.96215820313 1 
0.05126953125 2 
0.101318359375 2 
0.1513671875 2 

, 샘플 비율은 약 0.05 초이다. 데이터를 가정

+0

'laptime'은 누적하려는 것입니까? 방금 총을 원해? 귀하의 예제 데이터에 예상되는 결과는 무엇입니까? – wwii

+0

'경과'는 'laptime'에서 계산할 것으로 예상되는 결과/결과입니다. 현실 세계에서는 'laptime'과 'lap'만 있고 실제 샘플 데이터는 두 번째 블록입니다. –

답변

0
import io, operator, itertools 

텍스트 파일 또는 여러 줄 문자열에 있습니다

s = '''113.81201171875 1 
113.86206054688 1 
113.912109375 1 
113.96215820313 1 
0.05126953125 2 
0.101318359375 2 
0.1513671875 2''' 
f = io.StringIO(s) 

이 목록에 데이터를 수집; 랩을 누른 다음 시간순으로 목록을 정렬하십시오. 랩으로 데이터를 그룹화하고 가장 크고 가장 작은 시간을 추출하십시오. 경과 된 랩타임을 계산한다. 급격한.

data = [] 
for line in f: 
    time, lap = map(float, line.strip().split()) 
    data.append((time, lap)) 

lap = operator.itemgetter(1) 
time = operator.itemgetter(0) 

data.sort(key = operator.itemgetter(1,0)) 
total = 0 
for el, times in itertools.groupby(data, lap): 
    low, *_, high = map(time, times) 
    elapsed = high - low 
    print(f'lap {el}, elapsed time: {elapsed}') 
    total += elapsed 
print(f'total elapsed time: {total}') 


>>> 
lap 1.0, elapsed time: 0.15014648438000222 
lap 2.0, elapsed time: 0.10009765625 
total elapsed time: 0.2502441406300022 
>>> 
관련 문제