팬더 DataFrame에서 열의 값이 최대인 행을 찾습니다.
특정 열의 값이 최대인 행을 찾으려면 어떻게 해야 합니까?
df.max()
각 열에 대한 최대값이 표시됩니다. 해당 행을 가져오는 방법을 모르겠습니다.
판다 기능을 사용합니다.간단합니다.
>>> 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'].idxmax()
3
>>> df['B'].idxmax()
4
>>> df['C'].idxmax()
1
에 '하다'를 사용할 .
numpy.argmax
「」, 「」등입니다.numpy.argmax(df['A'])
것을 ------------------------------------------------------------------------------------------------------------------------------------------------------------idxmax
략적대idxmax()
는 정수가 아닌 인덱스 라벨을 반환합니다.예': 행 'a'에서 'e'까지와 같이 인덱스 레이블로 문자열 값이 있는 경우 최대값이 행 'd'가 아닌 행 4에서 발생함을 알 수 있습니다.
를 「」로 는, 「」로 합니다.
Index
수동으로 취득할 필요가 있습니다(행 라벨의 중복이 허가되고 있기 때문에, 이것은 복잡해질 가능성이 있습니다).
이력 메모:
idxmax()
이전에는 0.11 이전부터 호출되었습니다.argmax
1.01..0.0.0으로- 0으로 되돌아가면, 0.16으로 되돌아가다
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 식별자와 같은 문자열 레이블이 사용됩니다.유형 시스템을 쉽게 사용할 수 없으며, 예기치 않게 누락된 데이터가 없으면 인덱스에 고유성을 적용할 수 없습니다.
「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」의 순서로 지정합니다.결국 그 이유는idxmax
max 행의 라벨만 보고할 수 있으며, 표준 함수가 자동으로 max 행의 위치를 얻지 못해 실망하여 버그 실장을 직접 작성하고 코드를 편집하여 다시 문제가 발생하지 않기를 바랍니다.
한 번 시험해 보세요.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
위의 두 응답 모두 최대값을 사용하는 행이 여러 개 있는 경우에만 하나의 인덱스를 반환합니다.모든 행을 원하는 경우 기능이 없는 것 같습니다.하지만 그것은 어렵지 않다.다음은 Series의 예입니다. Data Frame에서도 동일한 작업을 수행할 수 있습니다.
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.iloc[df['columnX'].argmax()]
argmax()
는 컬럼X의 최대값에 대응하는 인덱스를 제공합니다. iloc
DataFrame df 의 데이터 프레임 df 의 데이터 프레임의 데이터 프레임의 데이터 프레임의 데이터 프레임의 데이터 프레임의 데이터 프레임의 데이터 프레임의 데이터 프레임의 설정.
query()를 사용한 보다 콤팩트하고 읽기 쉬운 솔루션은 다음과 같습니다.
import pandas as pd
df = pandas.DataFrame(np.random.randn(5,3),columns=['A','B','C'])
print(df)
# find row with maximum A
df.query('A == A.max()')
또한 Series 대신 DataFrame을 반환하므로 일부 사용 사례에 유용합니다.
매우 간단합니다. 다음과 같은 df가 있으며, 최대값을 C로 한 행을 인쇄하고 싶습니다.
A B C
x 1 4
y 2 10
z 5 9
입력:
df.loc[df['C'] == df['C'].max()] # condition check
출력:
A B C
y 2 10
" "가 행 id
, 을 사용하면 .df.nlargest
원하는 '상단' 행의 수를 입력할 수 있습니다.또한 원하는 열/열도 입력할 수 있습니다.
df.nlargest(2,['A'])
2의 .A
.
df.nsmallest
최소값으로 지정합니다.
직접 ".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()
mx.iloc[0].idxmax()
한서 설명하겠습니다.mx
과 '''입니다.iloc[0]
인덱스0을 .번째 인덱스를 나타냅니다.
idmax
은 합니다.argmax
의 pandas
(현재는 경고가 반환됩니다).위치 인덱스를 사용하려면 다음을 수행할 수 있습니다.
max_row = df['A'].values.argmax()
또는
import numpy as np
max_row = np.argmax(df['A'].values)
「」를 사용하는 는, 의 점에 해 주세요.np.argmax(df['A'])
은 똑같습니다.df['A'].argmax()
.
이 데이터 프레임을 고려했을 때
[In]: df = pd.DataFrame(np.random.randn(4,3),columns=['A','B','C'])
[Out]:
A B C
0 -0.253233 0.226313 1.223688
1 0.472606 1.017674 1.520032
2 1.454875 1.066637 0.381890
3 -0.054181 0.234305 -0.557915
열 "C"가 최대인 행을 알고 싶다고 가정하면 다음과 같이 작업을 수행할 수 있습니다.
[In]: df[df['C']==df['C'].max()])
[Out]:
A B C
1 0.472606 1.017674 1.520032
용도:
data.iloc[data['A'].idxmax()]
data['A'].idxmax()
value -syslog max location 。data.iloc(
- 이 반환됩니다.) - 행이 반환됩니다.
는, 「」입니다.idxmax
첫 번째 최대값 인덱스만 반환합니다.데이터 프레임
A B C
0 1 0 1
1 0 0 1
2 0 0 0
3 0 1 1
4 1 0 0
idxmax
A 0
B 3
C 0
dtype: int64
서 모든 인덱스를 할 수 max
+eq
DataFrame을하려면 DataFrame에서 합니다.df.index
★★★★★★★★★★★★★★★★★★★★★★★★★:
out = df.eq(df.max()).apply(lambda x: df.index[x].tolist())
출력:
A [0, 4]
B [3]
C [0, 1, 3]
dtype: object
언급URL : https://stackoverflow.com/questions/10202570/find-row-where-values-for-column-is-maximal-in-a-pandas-dataframe
'programing' 카테고리의 다른 글
MySQL RESTRICT와 No ACTION (0) | 2023.02.06 |
---|---|
timedelta를 총 초수로 변환 (0) | 2023.02.06 |
정해진 길이에 도달하기 위해 문자열을 패딩할 수 있는 JavaScript 함수가 있나요? (0) | 2023.02.06 |
MySQL 발생 횟수가 2를 초과합니다. (0) | 2023.02.06 |
PDO:: 10진수 타입의 PARAM? (0) | 2023.02.06 |