2017-04-02 1 views
1

NBA 게임에 대한 통계의 pandas DataFrame이 있습니다. 여기 멀리 팀에 대한 데이터의 예는 다음과 같습니다인덱스와 컬럼을 유지하면서 Python 팬더 롤링

        away_team away_efg away_drb away_score 
date 
2000-10-31 19:00:00 Los Angeles Clippers  0.522  74.4   94 
2000-10-31 19:00:00   Milwaukee Bucks  0.434  63.0   93 
2000-10-31 19:30:00 Minnesota Timberwolves  0.523  73.8   106 
2000-10-31 19:30:00  Charlotte Hornets  0.605  77.1   106 
2000-10-31 19:30:00  Seattle SuperSonics  0.429  73.1   88 

홈 팀의 away_score 열 이외의 더 많은 숫자 열, 또한 유사한 열이 있습니다.

각 행에 대해 점수 이외의 숫자 열을 팀으로 분할 된 이전 세 번의 관측 값의 평균으로 바꿉니다. 내가 거의 수행하여 내가 원하는 것을 얻을 수있는 다음과 같은 :

home_df.groupby("team").apply(lambda x: x.rolling(window=3).mean()) 

이 예를 들어, 반환,

>>> home_avg[home_avg["team"]=="Utah Jazz"].head() 
     3par  ast blk  drb  efg  ftr  orb 
0   NaN  NaN NaN  NaN  NaN  NaN  NaN 
50  NaN  NaN NaN  NaN  NaN  NaN  NaN 
81 0.146667 71.600000 9.4 74.666667 0.512000 0.347667 25.833333 

>>> home_df[home_df["team"]=="Utah Jazz"].head() 
     3par ast blk drb efg ftr orb stl  team tov trb 
0 0.118 76.7 7.1 64.7 0.535 0.365 25.6 11.5 Utah Jazz 10.8 42.9 
50 0.100 63.9 9.1 80.5 0.536 0.414 27.6 2.2 Utah Jazz 20.2 58.6 
81 0.222 74.2 12.0 78.8 0.465 0.264 24.3 7.3 Utah Jazz 13.9 50.0 
122 0.119 81.8 11.3 75.0 0.515 0.642 25.0 12.2 Utah Jazz 21.8 52.5 
135 0.129 76.7 17.8 75.9 0.650 0.400 37.9 5.7 Utah Jazz 18.8 62.7 

와 함께이 복용하면인지 보여줍니다 평균을 계산할 때 현재 행을 포함하여 나는 이것을 피하고 싶다. 보다 구체적으로 말하면, 81 행에 대한 원하는 출력은 모두 NaN (아직 3 회의 게임이 없었기 때문에)이고 행 122에 대한 3par 열의 항목은 .146667 (해당 열의 값 평균 행 0, 50 및 81).

내 질문은 어떻게 롤링 평균 계산에서 현재 행을 제외 할 수 있습니까? 당신은 당신의 롤 창은 현재의 값을 제외한 마지막 세 값을 사용하기 위해 주어진 양 여기있는 이동 인덱스를 shift을 사용할 수 있습니다

답변

2

: 따라서

# create dummy data frame with numeric values 
df = pd.DataFrame({"numeric_col": np.random.randint(0, 100, size=5)}) 
print(df) 

    numeric_col 
0 66 
1 60 
2 74 
3 41 
4 83 

df["mean"] = df["numeric_col"].shift(1).rolling(window=3).mean() 
print(df) 

    numeric_col  mean 
0 66    NaN 
1 60    NaN 
2 74    NaN 
3 41    66.666667 
4 83    58.333333 

를, 당신의가 lambda x: x.shift(1).rolling(window=3).mean()에 함수를 적용 변경 당신의 구체적인 예에서 작동하게하십시오.

+0

굉장합니다, 감사합니다! – user4601931

관련 문제