2017-01-28 1 views
1

저는 연례 야구 통계를보고 있으며 히트 수와 관련하여 지난 3 년간의 성과를 되돌아 보면서 롤링 평균을 계산하고 싶습니다. 그러나 필자는 데이터 세트가 3 년 이상으로 돌아가는 동안 1 명의 싱글 플레이어가 1-2 년 동안 리그에 머물러있을 수 있으며 3 년 동안 관찰 할 가치가 없을 것이라고 설명하고 싶습니다. 롤링 평균을 계산하십시오. 예를 들어 내가 계산하는 GROUPBY 및 통합/변환 (또는 다른 프로세스)를 사용하는 것이 어떻게관측 수를 보장하지 않고 팬더 롤링 평균을 사용하는 방법

In[6]: df = pd.DataFrame({'PLAYER_ID': ['A', 'A', 'A', 'B', 'B'], 
          'HITS': [45, 55, 50, 20, 24]}) 
In[9]: df 
Out[9]: 
    PLAYER_ID HITS 
0   A 45 
1   A 55 
2   A 50 
3   B 20 
4   B 24 

을 압연 3 년을 최대로 각 플레이어 에 대한 역사적인 합계을 의미 한 후 바로 사용할 수있는 최대 사용 3 년 미만의 역사적인 성과 데이터를 보유한 플레이어에 대한 역사적인 관찰은 가능한가?

확실히 내 답변은 팬더 패키지에 있지만 모든 솔루션에 관심이있을 것입니다.

감사합니다.

+0

실제로 원하는대로 꾸밀 수 있습니까? 플레이어 당 1 ~ 3 회의 관측만으로이 데이터는 롤링 평균이 특히 의미가 없기에 너무 희박합니다. –

+0

설명의 단순화를 위해 연율 화되었습니다. 게임 레벨 데이터에서 다른 것들과 함께이 작업을 수행 할 것입니다. – Alt182

+0

[샘플링 빈도] (http://pandas.pydata.org/pandas-docs/stable/timeseries.html#resampling)은 무엇입니까? –

답변

1

pd.DataFrame.rolling이 문제를 자동으로 처리합니다. 귀하의 예제 데이터를 사용하여, df.groupby('PLAYER_ID').rolling(1).mean() 당신에게 줄 것이다 : 당신의 예제의 경우를 들어

   HITS PLAYER_ID 
PLAYER_ID 
A   0 45.0   A 
      1 55.0   A 
      2 50.0   A 
B   3 20.0   B 
      4 24.0   B 

을 나는 우리가 자신의 평균으로 각각의 관찰을 치료하고 있음을 의미 단지 하나의 창 크기를 사용하고 있습니다. 이것은 특히 흥미로운 것은 아닙니다. 더 많은 데이터를 사용하면 더 큰 창 크기를 사용할 수 있습니다. 예를 들어 데이터가 주간 단위 인 경우 rolling(5)은 대략 월별 윈도우 크기를 제공합니다 (데이터가 매일 인 경우 rolling(31) 등).

  1. 데이터가 정기적으로 샘플링되지 않은 경우 (예를 들어, 1 주일 또는 한 번에 한 달을 생략하는 경우), 당신의 롤링 평균 :

    두 가지 문제가이 방법을 사용할 때주의해야 할 제 시간에 정렬되지 않습니다. 이러한 이유로 데이터가 이미 정기적으로 샘플링되지 않은 경우 일반적으로 샘플을 다시 샘플링하려고합니다.

  2. 데이터에 NaN 값이 포함되어있는 경우 값이 전파됩니다. 즉, NaN을 포함하는 모든 창도 NaN이됩니다. 어떻게 든 그 일을 피하려면 impute those values해야합니다.
+0

나를 위해이 작품을 말할 수 없다. 이것을 시도하면 AttributeError "DataFrameGroupby"객체의 "호출 가능한 속성을 롤링 할 수 없습니다"라는 메시지가 나타납니다. 그래도 할 수 있습니다 : [In] (''HITS ': {'롤링 평균 HITS ','HITS ', 오름차순 = True, inplace = True) [25] : df_test = df_test.groupby (['PLAYER_ID '], as_index = False) : λx : x [-3 :].평균()}}이는)에서 는 [26] 아웃 [26] df_test : PLAYER_ID가 롤링 평균을 히트 그래서 오랫동안 미리이 동일하지 않을 것이다 소트로 0 A 50 1 B 22' 을 HITS ? – Alt182

+0

'pandas '의 어떤 버전을 사용하고 있습니까? 'rolling' 객체는 상대적으로 최근에 도입되었는데, 그 전에는 대신 rolling_mean (1)을 사용했습니다. 대안 : 예,이 특정 인스턴스에서 작동 할 수도 있지만 일반화가 얼마나 잘되는지 확신 할 수 없습니다. –

+0

팬더 0.18.0 그렇게 될 수 있습니다. 그리고 도움에 다시 한번 감사드립니다. – Alt182

관련 문제