programing

팬더 DataFrame에서 열의 값이 최대인 행을 찾습니다.

bestcode 2023. 2. 6. 23:35
반응형

팬더 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 이전부터 호출되었습니다.
  • argmax1.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 식별자와 같은 문자열 레이블이 사용됩니다.유형 시스템을 쉽게 사용할 수 없으며, 예기치 않게 누락된 데이터가 없으면 인덱스에 고유성을 적용할 수 없습니다.

」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」의 순서로 지정합니다.결국 그 이유는idxmaxmax 행의 라벨보고할 수 있으며, 표준 함수가 자동으로 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의 최대값에 대응하는 인덱스를 제공합니다. ilocDataFrame 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 은 합니다.argmaxpandas(현재는 경고가 반환됩니다).위치 인덱스를 사용하려면 다음을 수행할 수 있습니다.

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

반응형