2017-12-16 10 views
1

파이썬으로 타임 시리즈 프로그래밍을 처음 사용합니다. 여기에 샘플 파일이 있습니다 :파일의 각 라인에 대해, 타임 스탬프의 차이가 적어도 n 초인 바로 다음 라인을 찾으십시오.

DateTime<space> Price <space> Data1<space> Data2 

Sample file contents: 
20171105 09:20:01.134 2123.00 12.23 34.12 
20171105 09:20:01.789 2133.00 32.43 45.62 
20171105 09:20:02.238 2423.00 35.43 55.62 
20171105 09:20:02.567 3423.00 65.43 56.62 
20171105 09:20:02.948 2463.00 45.43 58.62 

Date Format: 
YYYYMMDD hh:mm:ss.mi 
YYYY => Year 
MM => Month starting from 01 
DD => Day of month starting from 01 
hh => hour 
mm => minute 
ss => second 
mi => milliseconds 

가격을 n 초씩 이동해야한다고 가정하십시오. 의 각 행에 대해 파일의 시간 소인 차이가 n 초 이상인 즉시 다음 행을 찾으십시오. 우리는 라인 l1에 있고 타임 스탬프 차이가있는 바로 다음 라인이 n 초인 것으로 가정 해보십시오. 그러면 l1의 이동 시간은 l2의 가격입니다 - l1의 가격입니다. 위의 논리를 해결할 수 있습니다. 이동 시간 간격이 1 초라고 가정합니다. 그 다음에 은 1 초 간격으로 라인이 다음과 같습니다.

쌍 (첫 번째 줄, 세 번째 줄), (두 번째 줄, 다섯 번째 줄). 세 번째, 네 번째 및 다섯 번째 라인은 쌍을 갖지 않습니다. 즉, 타임 스탬프 차이가 1 초 이상인 라인이 없습니다.

첫 번째 줄의

변경됨 가격은 2423.00입니다 - 2123.00 = 300 두 번째 줄의 변경됨 가격은 2463.00입니다 - 2133.0 = 330 더 라인 번호 3, 4, 5가

누군가가 나를 도울 수에 대한 가격 이동이 없습니다 판다드에서 이것을위한 코드를 작성하십시오. 많은 분들께 미리 감사드립니다.

답변

0

은 여기 접근 방식 :

import pandas as pd 

# read CSV and parse dates 
df = pd.read_csv('tmp.csv', delim_whitespace=True, names=range(5), 
       parse_dates={'date': [0, 1]}) 

# find indices of shifted values 
n = 1 
shifted = df['date'] + pd.Timedelta(n, 's') 
indices = df['date'].searchsorted(shifted) 

# add a column with the shift 
df['shift'] = df[2].reindex(indices).reset_index(drop=True) - df[2] 
print(df) 

결과는 이것이다 :

     date  2  3  4 shift 
0 2017-11-05 09:20:01.134 2123.0 12.23 34.12 300.0 
1 2017-11-05 09:20:01.789 2133.0 32.43 45.62 330.0 
2 2017-11-05 09:20:02.238 2423.0 35.43 55.62 NaN 
3 2017-11-05 09:20:02.567 3423.0 65.43 56.62 NaN 
4 2017-11-05 09:20:02.948 2463.0 45.43 58.62 NaN 
+0

고마워, jakevdp .. –