2014-03-25 2 views
0

나는 농구 팀에 대한 분석을하고 있습니다. 나는 팬더를 사용했지만 최근에는 조건에 따라 Excel VLookup과 동등한 작업을 수행해야합니다. 나는 1985 년 이래로 모든 팀 데이터 (팀이 30 개)를 보유하고 있습니다 (2013 년까지). 연도 열에 3 년을 추가하는 Year3이라는 열을 추가했습니다. Year를 가져와 백분위 수를 반환하는 새 열 (Perc3이라고 부름)에서 vlookup을 수행하려고합니다. 이 상황을 혼란스럽게 만드는 조건은 올해의 팀과 일치해야한다는 것입니다. 및 (년도 :팬더에서의 컨디션을 가진 vlookup

Team Year Percentile WLPer LgRnk W L Year3 308 Atlanta Hawks 1997 0.793103 0.683 23 56 26 2000 23 Atlanta Hawks 1986 0.782609 0.610 18 50 32 1989 69 Atlanta Hawks 1988 0.695652 0.610 16 50 32 1991 337 Atlanta Hawks 1998 0.689655 0.610 20 50 32 2001 252 Atlanta Hawks 1995 0.518519 0.512 14 42 40 1998 395 Atlanta Hawks 2000 0.172414 0.341 5 28 54 2003

정도로 (308로 표시)의 첫 번째 행에 대한 Year3 난 (PERC3)을 생성 할 열, I는 (애틀랜타에서 팀)에 해당하는 백분위 결핍 2000이다 : 2000). 이 작업을 수행하는 쉬운 방법이 있습니까?

예상 출력 : 다음은 패널에 틈이 (즉, 팀 내에서 어떤 년이 생략 없음)이없는 경우 다음과 같은 작업을해야

Team Year Percentile WLPer LgRnk W L Year3 Perc3 308 Atlanta Hawks 1997 0.793103 0.683 23 56 26 2000 0.172414 23 Atlanta Hawks 1986 0.782609 0.610 18 50 32 1989 0.840000 69 Atlanta Hawks 1988 0.695652 0.610 16 50 32 1991 0.555556 337 Atlanta Hawks 1998 0.689655 0.610 20 50 32 2001 0.172414 252 Atlanta Hawks 1995 0.518519 0.512 14 42 40 1998 0.689655 395 Atlanta Hawks 2000 0.172414 0.341 5 28 54 2003 0.275862

+0

그래서 DataFrame에는 호크스 (Hawks)의 행이 있는데, 이는 2000 년입니다. 좀 더 완벽한 DataFrame과 예상 출력을 게시하는 데 도움이 될 것입니다. – TomAugspurger

+0

감사합니다. 그렇습니다. 호크스의 행은 2000 년입니다. 근본적으로, 나는 1985 년부터 2013 년까지 모든 팀을 대상으로합니다. 사실 vlookup (year and team)에 대한 두 가지 조건이 나를 혼란스럽게합니다. 예상 출력을 추가했습니다. 행 308과 행 395를 찾으면 조회가 표시되어야합니다. – itjcms18

답변

0

.

먼저 정렬에 의해 [ '팀', '년'] 지금 당신의 패널은 다음과 같습니다 :

same_team = df.team == df.team.shift(-3) 
df['ptile3'] = df['ptile'].shift(-3).where(same_team) 
print df 

    team year ptile ptile3 
0  A 2000 0.40 0.30 
1  A 2001 0.42 0.38 
2  A 2002 0.46 0.40 
3  A 2003 0.30 0.35 
4  A 2004 0.38 0.50 
5  A 2005 0.40  NaN 
6  A 2006 0.35  NaN 
7  A 2007 0.50  NaN 
8  B 2000 0.60 0.65 
9  B 2001 0.70 0.75 
10 B 2002 0.55 0.72 
11 B 2003 0.65 0.66 
12 B 2004 0.75 0.56 
13 B 2005 0.72  NaN 
14 B 2006 0.66  NaN 
15 B 2007 0.56  NaN 
:

df = df.sort(['team','year']) 
print df 

    team year ptile 
0  A 2000 0.40 
1  A 2001 0.42 
2  A 2002 0.46 
3  A 2003 0.30 
4  A 2004 0.38 
5  A 2005 0.40 
6  A 2006 0.35 
7  A 2007 0.50 
8  B 2000 0.60 
9  B 2001 0.70 
10 B 2002 0.55 
11 B 2003 0.65 
12 B 2004 0.75 
13 B 2005 0.72 
14 B 2006 0.66 
15 B 2007 0.56 

둘째, percentile3 열을 생성하기 위해 shiftwhere 명령을 사용하여

또한 groupby/apply 내에서 이러한 목표를 달성하기 위해 shift을 사용할 수

df['ptile3'] = df.groupby('team')['ptile'].apply(lambda x: x.shift(-3)) 
+0

이것은 꽤 굉장합니다. 나는 groupby를 사용하고 vlookup을 적용하려고 시도 했었고 그것을 상당히 해독 할 수 없었습니다. 이것은 완벽하게 작동하지만 내 자신의 교육 용도로만 사용하면 몇 년을 뛰어 넘고 vlookup이 필요할 경우 어떻게해야하는지 알 수 있습니까? – itjcms18

+0

가장 쉬운 방법은 'resample' 명령을 사용하여 생략 된 연도를 추가하는 것입니다 (백분위 수 변수는 그 해에 누락 될 것입니다). 그러면 똑같은 방법으로'shift'와'where'를 사용할 수 있습니다. –