1
그래서 나는이파이썬 : 기능 반환 중복
INDEX YEAR_ID GAME_ID BAT_TEAM_ID INN_CT EVENT_CD INN_PA_CT wBB wHBP w1B
0 2016 1 ANN 1 1 0 0.691 0.721 0.878
1 2016 1 ANN 1 3 1 0.691 0.721 0.878
2 2016 1 ANN 2 3 0 0.691 0.721 0.878
3 2016 1 ANN 2 1 1 0.691 0.721 0.878
4 2016 1 CLE 2 2 0 0.691 0.721 0.878
5 2016 1 CLE 2 2 1 0.691 0.721 0.878
6 2016 2 KCA 1 1 0 0.691 0.721 0.878
7 2016 2 KCA 1 1 1 0.691 0.721 0.878
8 2016 2 KCA 1 3 2 0.691 0.721 0.878
9 2016 2 KCA 1 2 3 0.691 0.721 0.878
10 2016 2 TEX 1 1 0 0.691 0.721 0.878
11 2016 2 TEX 1 1 1 0.691 0.721 0.878
12 2016 2 TEX 1 2 2 0.691 0.721 0.878
13 2016 2 TEX 1 1 3 0.691 0.721 0.878
14 2016 2 KCA 2 2 0 0.691 0.721 0.878
15 2016 2 KCA 2 2 1 0.691 0.721 0.878
과 같은 테스트 데이터 집합을 만들어 값과 나는 몇 가지 통계를 계산하는 함수를 정의했습니다 :
def woba(x):
return ((((x['EVENT_CD'] == 1).sum() * x['wBB']) +
((x['EVENT_CD'] == 2).sum() * x['wHBP']) +
((x['EVENT_CD'] == 3).sum() * x['w1B']))/(x['INN_PA_CT'].max()))
stat = df.groupby(['BAT_TEAM_ID', 'GAME_ID', 'INN_CT']).apply(woba)
stat = stat.reset_index(level = ['BAT_TEAM_ID', 'GAME_ID', 'INN_CT'])
stat.columns = ['BAT_TEAM_ID', 'GAME_ID', 'INN_CT', 'wOBA']
을하고 함수의 작동, 그것은 내가 원하는 값을 반환하지만 어떤 이유로 결과에 중복이 있습니다
INDEX BAT_TEAM_ID GAME_ID INN_CT wOBA
0 ANN 1 1 1.569
1 ANN 1 1 1.569
2 ANN 1 2 1.569
3 ANN 1 2 1.569
4 CLE 1 2 1.442
5 CLE 1 2 1.442
6 KCA 2 1 0.993666667
7 KCA 2 1 0.993666667
8 KCA 2 1 0.993666667
9 KCA 2 1 0.993666667
14 KCA 2 2 1.442
15 KCA 2 2 1.442
10 TEX 2 1 0.931333333
11 TEX 2 1 0.931333333
12 TEX 2 1 0.931333333
13 TEX 2 1 0.931333333
wh 6 행만 있어야합니다.
무엇이 잘못 되었습니까, 아니면 어떻게 해결할 수 있습니까?
음, 왜 그것이 단지 6 행해야한다고 생각합니까? 당신은 데이터 프레임을 반환하는 함수를'.apply'로 집계하고 데이터에서 볼 수 있듯이'wBB wHBP w1B'가 반복됩니다 ... –
각 팀의 통계를 계산하려고합니다. 게임 당, 이닝당. 인덱스 0과 1은 같은 팀, 게임 및 이닝에 대해 동일한 값을 가지며 인덱스 2와 3도 마찬가지입니다. 가장 중복되는 것은 인덱스 6-9입니다. 'wBB, wHBP, w1B'는 다른 액션에 대한 가중치이며 해마다 바뀌어 계산을 위해 데이터 프레임과 병합됩니다. – Justin
글쎄, 당신의 기능이 무엇인지 모르겠다. 그 수준에서 고칠 수 있지만, 언제나'.drop_duplicates()'를 추가 할 수있다. –