2016-10-17 3 views
2

특정 기능을 계산해야하는 팬더 데이터 프레임에 다양한 레이스 섹션 데이터 세트가 있습니다.팬더 : 일련의 열 중에서 첫 번째 유효한 열을 찾는 방법

id   distance  timeto1000m timeto800m timeto600m timeto400m timeto200m timetoFinish 
1   1400m  10    21   30   39   50   60  
2   1200m  0    19   31   42   49   57 
3   1800m  0    0    0   38   49   62 
4   1000m  0    0    29   40   48   61 

그럼, 내가해야 할 것은 제로가 아닌 첫 번째 timetoXXm 열과 correspoding 거리 XX을 찾아 각 행에 대해 수 있습니다 : 그것은 다음과 같이 보입니다. 예를 들어, id=1 위해 그 id=3을 위해 그 것, 1,000m 것이다 400m 등

내가 if..elif..else 일련의 조건으로이 작업을 수행 할 수 있지만 팬더에서 조회 이런 종류의 일을 더 나은 방법이 있는지 궁금 해서요/수치스러운거야? 관심의

당신은 이런 식으로 작업을 수행 할 수 있습니다

답변

2

먼저 필터 COLS하고 부울 조건이 충족되는 경우 다음 조각을 열을 반환하는 관심의 COLS에 idxmin 전화 :

In [11]: 
df_slice = df.ix[:,df.columns.str.startswith('time')] 
df_slice[df_slice!=0].idxmin(axis=1) 

Out[11]: 
0 timeto1000m 
1  timeto800m 
2  timeto400m 
3  timeto600m 
dtype: object 

In [15]: 
df['first_valid'] = df_slice[df_slice!=0].idxmin(axis=1) 
df[['id','first_valid']] 

Out[15]: 
    id first_valid 
0 1 timeto1000m 
1 2 timeto800m 
2 3 timeto400m 
3 4 timeto600m 
1

사용을 idxmax(1)

df.set_index(['id', 'distance']).ne(0).idxmax(1) 

id distance 
1 1400m  timeto1000m 
2 1200m  timeto800m 
3 1800m  timeto400m 
4 1000m  timeto600m 
dtype: object 
관련 문제