2015-01-23 12 views
2

팬더 데이터 프레임에 두 개의 열이 있습니다.팬더 데이터 프레임의 조건부 선택

A  B 
0 1  5 
1 2  3 
2 3  2 
3 4  0 
4 5  1 

B 값이 최소가되는 값이 필요합니다. 위의 경우 최소 B 값이 0이므로 내 대답은 4가됩니다.

아무도 도와 줄 수 있습니까?

+1

테이블 모양이 분명하지 않습니다. 읽을 수있는 형식으로 포맷하십시오. – ryanyuyu

+0

림 유유 ... 어때? –

+0

예, 이제 테이블을 읽을 수 있습니다. – ryanyuyu

답변

5

열 B에서 최소값을 찾으려면 df.B.min()을 사용할 수 있습니다. DataFrame의 경우 0을 반환합니다.

가 DataFrame에서 특정 위치에서의 값을 찾기 위해, 사용자가 loc 사용할 수

>>> df.loc[(df.B == df.B.min()), 'A'] 
3 4 
Name: A, dtype: int64 

를 그래서 여기 loc 칼럼 B는 최소값 (df.B == df.B.min()) 및 선택 같은지의 모든 행을 집어

이 방법은 B의 최소값에 해당하는 A의 모든 값을 반환합니다. 값 중 하나만 필요하면 더 좋은 방법은 @aus_lacy가 제안하는대로 idxmin을 사용하는 것입니다.

b_min = df.B.idxmin() 
a_val = df.A[b_min] 

idxmin()B 내에서 최소 값의 인덱스를 반환

+0

에 맞게 설계되었습니다.이 솔루션은 B 열의 최소값이 고유하지 않은 경우 내 값으로 설정하십시오. –

+0

단지 짧은 표기법을 지키기 위해서'df.A.loc [df.B == df.B.min()]' – fred

3

여기에 하나의 방법입니다. 그런 다음 동일한 인덱스의 값을 A 열에 위치시킵니다.

또는 당신은 당신이 할 수있는이기는하지만, 하나의 적은 읽을 수있는 라인을 원하는 경우이 좋아하는이 :

또한
a_val = df.A[df.B.idxmin()] 

, 부인으로이 솔루션은 열 B의 최소 값은 고유 한 것으로 간주합니다. 예를 들어, 당신은이처럼 보였다 데이터 세트를 가지고 있다면 :

A B 
1 2 
2 5 
3 0 
4 3 
5 0 

B의 최소 값은 세 번째 행에이 경우 어느 위치 및 해당이되는 첫 번째 인스턴스를 반환 내 솔루션 A 값은 3입니다. B의 최소값이 고유하지 않다고 생각하면 @ ajcr의 솔루션으로 가야합니다.

관련 문제