팬더를 처음 접했고 고정 창 크기로 롤링 평균을 얻으려고합니다. 하지만 타임 스탬프 튜플과 값을 나타내는 두 개의 목록이 있습니다. 나는 후자에 대한 무게로 전자를 사용하고 싶습니다. 또한 데이터의 갭이 식별 가능한지 확인하고 싶습니다 (타임 스탬프가 반드시 연속적 일 필요는 없습니다).시간 가중치가있는 롤링 평균 팬더를 계산합니다
예 목록 : 내가 지금 사용하고 무엇
ts = [(1415969999, 1415970014), (1415970014, 1415970030), (1415970030, 1415970045), (1415970045, 1415970060), (1415970060, 1415970075), (1415970075, 1415970090), (1415970090, 1415970105), (1415970105, 1415970120), (1415970120, 1415970135), (1415970135, 1415970150), (1415970150, 1415970165), (1415970165, 1415970181), (1415970181, 1415970286), (1415970286, 1415970301), (1415970301, 1415970316)...]
values = [8.0, 13.0, 11.75, 7.0, 8.5, 16.0, 16.0, 6.5, 4.0, 8.25, 5.5, 1.0, 0.0, 0.5, 0.5, 0.0, 0.25, 0.0, 0.25, 0.0, 0.5, 0.0, 2.25, 0.0, 0.25, 0.0, 0.25, 0.0, 1.0, 0.25, 0.25, 0.0, 0.25, 0.0, 0.5, 0.25, 0.0, 1.0, 0.0, 0.5...]
은 다음과 같습니다
pandas_series = pd.Series(values) window_averages = pd.rolling_mean(pandas_series, window=90) # 90 would be seconds here
하지만 그 가중치를 고려하지 않습니다. 나는 모양이 here와 here 이었지만 꽤 함께 조각 수 없습니다.
편집
나는 일종의 내가 원하는 것을 얻을 수 있었다,하지만 난 솔루션이 매우 최적 생각하지 않습니다. 그것은 거의 I 하단에 필요한 입력을 나타내고,
후 다음과 같이 산출import pandas as pd
data = [(1415970014, 1415970030, 13.0), (1415970033, 1415970048, 11.75), (1415970048, 1415970053, 3.2)]
start_range = data[0][0]
end_range = data[len(data)-1][1]-1
previous_end_time = start_range
values = []
for t in data:
start_ts, end_ts, value = t
empties = []
while start_ts > previous_end_time:
empties.append(previous_end_time)
values.append(-1)
previous_end_time += 1
window_length = end_ts-start_ts
values += [value]*window_length
previous_end_time = end_ts
s_range_datetime_start = pd.to_datetime(start_range, unit='s')
s_range_datetime_end = pd.to_datetime(end_range, unit='s')
period_range = pd.period_range(s_range_datetime_start, s_range_datetime_end, freq='s')
series = pd.Series(values, period_range)
print series
는, 기본적으로 데이터를 1 초 외삽 (I 여기서 지금 -1로 표시되는) 데이터의 차이를 포함한다.
2014-11-14 13:00:14 13.00
2014-11-14 13:00:15 13.00
2014-11-14 13:00:16 13.00
2014-11-14 13:00:17 13.00
2014-11-14 13:00:18 13.00
2014-11-14 13:00:19 13.00
2014-11-14 13:00:20 13.00
2014-11-14 13:00:21 13.00
2014-11-14 13:00:22 13.00
2014-11-14 13:00:23 13.00
2014-11-14 13:00:24 13.00
2014-11-14 13:00:25 13.00
2014-11-14 13:00:26 13.00
2014-11-14 13:00:27 13.00
2014-11-14 13:00:28 13.00
2014-11-14 13:00:29 13.00
2014-11-14 13:00:30 -1.00
2014-11-14 13:00:31 -1.00
2014-11-14 13:00:32 -1.00
2014-11-14 13:00:33 11.75
2014-11-14 13:00:34 11.75
2014-11-14 13:00:35 11.75
2014-11-14 13:00:36 11.75
2014-11-14 13:00:37 11.75
2014-11-14 13:00:38 11.75
2014-11-14 13:00:39 11.75
2014-11-14 13:00:40 11.75
2014-11-14 13:00:41 11.75
2014-11-14 13:00:42 11.75
2014-11-14 13:00:43 11.75
2014-11-14 13:00:44 11.75
2014-11-14 13:00:45 11.75
2014-11-14 13:00:46 11.75
2014-11-14 13:00:47 11.75
2014-11-14 13:00:48 3.20
2014-11-14 13:00:49 3.20
2014-11-14 13:00:50 3.20
2014-11-14 13:00:51 3.20
2014-11-14 13:00:52 3.20
내 아이디어는이 기간에 롤링 평균을 적용하는 것이 었습니다.
위대한, 내 접근 방식보다 조금 더 잘 작동하는 것 같아요. 그러나 창 길이 (예 : 30 초)를 줄이면 타임 스탬프가 연속적이더라도 (일부는 타임 스탬프의 간격으로 인해 발생하며 괜찮습니다) 특정 값에 대해 NaN을 얻습니다. 이 문제를 어떻게 해결할 수 있습니까? 값을 보간 하시겠습니까? 감사. –
마지막 질문 인 건배에 대해'ffill()'메소드를 찾았습니다. –