특정 열의 값이 최대 인 행을 어떻게 찾을 수 있습니까?
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()