2014-02-22 2 views
3

DataFramepandas.rolling_sum 함수를 사용하여 각 창에 사용할 수있는 데이터를 사용하여 창을 합계합니다. 따라서 창이 사용 가능한 데이터를 벗어나면 NaN을 반환하지 마십시오. 내가 데이터를 각각의 창에서 사용할 수있는 무엇이든 NaN 가치와 사용을 제거 할pandas rolling_sum with center 및 min_periods

pd.rolling_sum(df, 7, center=True) 
#    num 
# 2014-01-01 NaN 
# 2014-01-02 NaN 
# 2014-01-03 NaN 
# 2014-01-04 10 
# 2014-01-05 11 
# 2014-01-06 NaN 
# 2014-01-07 NaN 
# 2014-01-08 NaN 

... 여기

import pandas as pd # version 0.12.0 (Python 2.7) 
df = pd.DataFrame([1]*4+[2]*4, 
        index=pd.date_range('2014-1-1', periods=8, freq='D'), 
        columns=['num']) 
df.head() 
#    num 
# 2014-01-01 1 
# 2014-01-02 1 
# 2014-01-03 1 
# 2014-01-04 1 
# 2014-01-05 2 

기본, 중심 롤링 합계는 다음과 같습니다 다음은 몇 가지 샘플 데이터입니다. 내 직감은 min_periods 옵션 ...이 알아서 것이라고했다

pd.rolling_sum(df, 7, center=True, min_periods=0) 
#    num 
# 2014-01-01 4 
# 2014-01-02 6 
# 2014-01-03 8 
# 2014-01-04 10 
# 2014-01-05 11 
# 2014-01-06 NaN 
# 2014-01-07 NaN 
# 2014-01-08 NaN 

창을 center=True을 사용하여 중앙에 있지 않을 때이 작동하지만, 마지막 세 값이없는 내가 왜 혼란 스러워요. 나는 min_periods 처음 관찰 작업을하지만 center=True 옵션을 사용할 때 마지막 관찰에 실패하는 이유

# 2014-01-06 10 
# 2014-01-07 9 
# 2014-01-08 8 

는 사람이 설명 할 수 ... 마지막 세 값이 될 것으로 예상했다? 그 수정은 뭐니?

답변

2

는 팬더 먼저 계산 것으로 보인다

>>> pd.rolling_sum(df, 7, center=False, min_periods=0) 
      num 
2014-01-01 1 
2014-01-02 2 
2014-01-03 3 
2014-01-04 4 
2014-01-05 6 
2014-01-06 8 
2014-01-07 10 
2014-01-08 11 

[8 rows x 1 columns] 

offset = int((window - 1)/2.) 

이것이 마지막 항목 비록 min_periods=0을위한 NaN 값을 발생 -offset 의해 다음 shift의 결과; 내 주변의 작품은 아래와 같습니다 :

>>> rs = pd.rolling_sum(df, 7, center=True, min_periods=0) 
>>> rs.update(pd.rolling_sum(df.iloc[:-7:-1], 7, center=True, min_periods=0)) 
>>> rs 
      num 
2014-01-01 4 
2014-01-02 6 
2014-01-03 8 
2014-01-04 10 
2014-01-05 11 
2014-01-06 10 
2014-01-07 9 
2014-01-08 8 

[8 rows x 1 columns]