특정 열의 값이 최대 인 행을 어떻게 찾을 수 있습니까?
df.max() 각 열의 최대 값을 알려 드리겠습니다. 해당 행을 얻는 방법을 모르겠습니다.
sort_values색인을 사용 하고 얻을 수 있습니다 :df.sort_values('col', ascending=False)[:2].index
특정 열의 값이 최대 인 행을 어떻게 찾을 수 있습니까?
df.max() 각 열의 최대 값을 알려 드리겠습니다. 해당 행을 얻는 방법을 모르겠습니다.
sort_values색인을 사용 하고 얻을 수 있습니다 :df.sort_values('col', ascending=False)[:2].index
답변:
팬더 idxmax기능을 사용하십시오 . 간단합니다 :
>>> import pandas
>>> import numpy as np
>>> df = pandas.DataFrame(np.random.randn(5,3),columns=['A','B','C'])
>>> df
A B C
0 1.232853 -1.979459 -0.573626
1 0.140767 0.394940 1.068890
2 0.742023 1.343977 -0.579745
3 2.125299 -0.649328 -0.211692
4 -0.187253 1.908618 -1.862934
>>> df['A'].argmax()
3
>>> df['B'].argmax()
4
>>> df['C'].argmax()
1
또는 당신은 또한 사용할 수있는 numpy.argmax등, numpy.argmax(df['A'])그것을 최대한 빨리 적어도 같은 일을 제공하고 나타납니다 - idxmax피상적 관찰한다.
idxmax() 정수가 아닌 인덱스 레이블을 반환합니다.
Index수동으로 가져와야합니다 (중복 행 레이블이 허용되므로 까다로울 수 있습니다).역사적 메모 :
idxmax()0.11 이전에 호출argmax()argmax 1.0.0 이전에 더 이상 사용되지 않으며 1.0.0에서 완전히 제거되었습니다.argmax존재하고 동일한 기능을 수행하는 데 사용되었습니다 ( idxmax) 보다 느리게 실행되는 것처럼 보입니다 .
argmax함수 는 최대 요소의 행 위치 색인 내 에서 정수 위치를 리턴했습니다 .예를 들어, DataFrame중복 장난감으로이 장난감 을 생각해보십시오 .
In [19]: dfrm
Out[19]:
A B C
a 0.143693 0.653810 0.586007
b 0.623582 0.312903 0.919076
c 0.165438 0.889809 0.000967
d 0.308245 0.787776 0.571195
e 0.870068 0.935626 0.606911
f 0.037602 0.855193 0.728495
g 0.605366 0.338105 0.696460
h 0.000000 0.090814 0.963927
i 0.688343 0.188468 0.352213
i 0.879000 0.105039 0.900260
In [20]: dfrm['A'].idxmax()
Out[20]: 'i'
In [21]: dfrm.iloc[dfrm['A'].idxmax()] # .ix instead of .iloc in older versions of pandas
Out[21]:
A B C
i 0.688343 0.188468 0.352213
i 0.879000 0.105039 0.900260
따라서 여기서는 순진한 사용은 idxmax충분하지 않지만 이전 형식은 최대 행 argmax의 위치를 정확하게 제공합니다 (이 경우 위치 9).
이것은 동적으로 유형이 지정된 언어에서 불쾌한 종류의 버그가 발생하기 쉬운 동작 중 하나입니다. 시스템 코드를 작성 중이고 시스템이 결합되기 전에 올바르게 정리되지 않은 일부 데이터 세트에서 갑자기 사용되는 경우 중복 행 레이블, 특히 금융 자산의 CUSIP 또는 SEDOL ID와 같은 문자열 레이블로 끝나기가 매우 쉽습니다. 유형 시스템을 사용하여 쉽게 도움을 줄 수 없으며 예기치 않게 누락 된 데이터가 발생하지 않으면 인덱스에 고유성을 적용하지 못할 수 있습니다.
따라서 단위 테스트가 모든 것을 다룰 수 있기를 바라고 있습니다 (그들은 테스트를하지 않았거나 더 이상 아무도 작성하지 않았을 것입니다). 당신은 아마 당신이 수동으로 문제를 재현하려고 IPython의 벽에 머리를 쾅 결과를 출력 한 데이터베이스에서 작업을 몇 시간 가치를 떨어 가야하는 경우 런타임에 오류가, 마침내 있다고 파악 때문에 idxmax할 수있는 유일한 max 행 의 레이블 을 보고 그런 다음 표준 함수가 자동으로 max 행 의 위치 를 얻지 못하여 버그가있는 구현을 작성하고 코드를 편집하며 문제가 다시 발생하지 않도록기도합니다.
argmin과 argmax의 일부가 남아 DataFrame과 차이점은 인덱스 또는 라벨을 원하는 단지 여부입니다. idxmax최대 값이 발생하는 위치의 레이블을 제공합니다. argmax인덱스 정수 자체를 제공합니다.
argmax와 idxmax,와 중복 인덱스 버그가 좋았어요 방지하는 방법! 다른 답변에서 귀하의 의견을 읽을 때까지는 알지 못했습니다. 감사!
argmax. 지금은 사용 series.values.argmax또는 np.argmax(np.array(values))최대 행의 위치를 얻을 수 있습니다. '
.ix두 번째 예의 방법은 다음과 같이 이름이 바뀌 었습니다..iloc
시도해 볼 수도 있습니다 idxmax.
In [5]: df = pandas.DataFrame(np.random.randn(10,3),columns=['A','B','C'])
In [6]: df
Out[6]:
A B C
0 2.001289 0.482561 1.579985
1 -0.991646 -0.387835 1.320236
2 0.143826 -1.096889 1.486508
3 -0.193056 -0.499020 1.536540
4 -2.083647 -3.074591 0.175772
5 -0.186138 -1.949731 0.287432
6 -0.480790 -1.771560 -0.930234
7 0.227383 -0.278253 2.102004
8 -0.002592 1.434192 -1.624915
9 0.404911 -2.167599 -0.452900
In [7]: df.idxmax()
Out[7]:
A 0
B 8
C 7
예 :
In [8]: df.loc[df['A'].idxmax()]
Out[8]:
A 2.001289
B 0.482561
C 1.579985
df.ix[df['A'].idxmax()].values내가 원하는 배열을 잡기 위해. 여전히 작동합니다.
idxmax로 공급 장치 등을 ix하거나 loc하위 슬라이스 수단으로 데이터 및 / 또는 최대 행의 위치 위치를 얻을 수 있습니다. 에 중복이있을 수 있으므로 Index예를 보려면 내 대답에 대한 업데이트를 참조하십시오.
위의 두 대답은 최대 값을 취하는 여러 행이있는 경우 하나의 인덱스 만 반환합니다. 모든 행을 원하면 기능이없는 것 같습니다. 그러나 어렵지 않습니다. 아래는 Series의 예입니다. DataFrame에 대해서도 동일하게 수행 할 수 있습니다.
In [1]: from pandas import Series, DataFrame
In [2]: s=Series([2,4,4,3],index=['a','b','c','d'])
In [3]: s.idxmax()
Out[3]: 'b'
In [4]: s[s==s.max()]
Out[4]:
b 4
c 4
dtype: int64
df[df['A'] == df['A'].max()]
직접 ".argmax ()"솔루션이 작동하지 않습니다.
@ely가 제공 한 이전 예제
>>> import pandas
>>> import numpy as np
>>> df = pandas.DataFrame(np.random.randn(5,3),columns=['A','B','C'])
>>> df
A B C
0 1.232853 -1.979459 -0.573626
1 0.140767 0.394940 1.068890
2 0.742023 1.343977 -0.579745
3 2.125299 -0.649328 -0.211692
4 -0.187253 1.908618 -1.862934
>>> df['A'].argmax()
3
>>> df['B'].argmax()
4
>>> df['C'].argmax()
1
다음 메시지를 반환합니다.
FutureWarning: 'argmax' is deprecated, use 'idxmax' instead. The behavior of 'argmax'
will be corrected to return the positional maximum in the future.
Use 'series.values.argmax' to get the position of the maximum now.
내 솔루션은 다음과 같습니다.
df['A'].values.argmax()