>
data['rolling_avg_val'] = 0
future_window = '1h'
for i in range(data.shape[0]):
        start_data_idx = data.index[i]
        end_data_idx = start_data_idx + pd.Timedelta(future_window)
        temp_avg = data['values'][start_data_idx:end_data_idx].mean()
        if temp_avg == 0:
            continue
        data.loc[start_data_idx,'rolling_avg_val'] = temp_avg

데이터 프레임은 2 주 동안의 데이터를 나타내는 약 5,000,000 행이며 인덱스는 밀리 초 단위의 타임 스탬프입니다.

2017-04-12 12:19:04.987   0
2017-04-12 12:19:05.157   1
2017-04-12 12:19:05.297   0
2017-01-12 12:19:05.330   0
2017-04-12 12:19:05.487   0
2017-04-12 12:19:05.530   1
2017-04-12 12:19:05.640   0
2017-04-12 12:19:05.703   1

보다시피, 타임 스탬프 간격이 고르지 않고 end_data_idx가 반드시 데이터 프레임에있는 것은 아니지만 팬더는 슬라이스 할 때 적절한 범위를 얻을 수 있습니다. 내가 볼 수있는 일반적인 해결책은 누락 된 시간 간격을 채우고 결과를 변경하는 것입니다. 그러나 이로 인해 메모리가 폭발하기 때문에이를 피하려고합니다.

내 컴퓨터에서는 초당 약 800 행을하는 것처럼 보입니다. 더 빠른 솔루션을 얻기 위해이 문제를 생각할 수있는 다른 방법이 있습니까?

수정 :

예상 출력 :

                         rolling_avg
2017-04-12 12:19:04.987   0.375
2017-04-12 12:19:05.157   0.429
2017-04-12 12:19:05.297   0.333
2017-01-12 12:19:05.330   0.4
2017-04-12 12:19:05.487   0.5
2017-04-12 12:19:05.530   0.667
2017-04-12 12:19:05.640   0.5
2017-04-12 12:19:05.703   1.0


  • 답변 # 1

    역순 df

    플립 인덱스 부호 (단조에서 감소로 증가

    rolling.mean ()

    색인 부호 다시 뒤집기

    다시 df 반전

    df2 = df[::-1]
    df2.index = pd.datetime(2050,1,1) - df2.index
    df2 = df2.rolling('1H').mean()
    df3 = df2[::-1]
    df3.index = df.index
    
    

관련 자료

  • 이전 actionscript 3 - Flash AS3 여러 객체 드래그
  • 다음 r - 3D 플롯이 보이지 않음