다음은 groupby 그룹에서 최대값을 갖는 행을 가져오는 pandas 방법입니다. 이는 좋은 참조 값을 가지고 있으며 모든 사람에게 도움이 되기를 바랍니다. 함께 살펴볼까요
groupby 그룹에서 최대값을 갖는 행을 가져오는 pandas 방법
예를 들어 Mt로 그룹화된 다음 DataFrame에서 가장 큰 Count를 갖는 행을 꺼냅니다
import pandas as pd df = pd.DataFrame({'Sp':['a','b','c','d','e','f'], 'Mt':['s1', 's1', 's2','s2','s2','s3'], 'Value':[1,2,3,4,5,6], 'Count':[3,2,5,10,10,6]}) df
Count | Mt | Sp | Value | |
---|---|---|---|---|
0 | 3 | s1 | a | 1 |
1 | 2 | s1 | b | 2 |
2 | 5 | s2 | c | 3 |
3 | 10 | s2 | d | 4 |
4 | 10 | s2 | e | 5 |
5 | 6 | s3 | f | 6 |
방법 1: 그룹에서 개수가 가장 많은 행
df.groupby('Mt').apply(lambda t: t[t.Count==t.Count.max()])
Count | Mt | Sp | Value | ||
---|---|---|---|---|---|
후지산 |
|
|
|||
s1 | 0 | 3 | s1 | a | 1 |
s2 | 3# | d | 4 | 4 | |
Count | Mt | Sp |
0
3
s1
a
1
s2 | d4 | 4# | e | |
---|---|---|---|---|
5 | 6 | s3 | f | 6 |
문제는 3행과 4행의 값이 모두 최대값이어서 여러 행이 반환된다는 점입니다. ? | 방법 3: idmax(이전 버전의 팬더는 argmax입니다) | |||
Count | Mt | Sp | Value |
s3f
6ㅋㅋㅋ0
3
s1
a
3 | 10# df.iloc[df.groupby(['Mt']).apply(lambda x: x['Count'].idxmax())] |
def using_apply(df): return (df.groupby('Mt').apply(lambda subf: subf['Value'][subf['Count'].idxmax()])) def using_idxmax_loc(df): idx = df.groupby('Mt')['Count'].idxmax() return df.loc[idx, ['Mt', 'Value']] print using_apply(df) using_idxmax_loc(df) |
||
---|---|---|---|---|
Mt | Value | |||
0 | s1 | 1 | ||
s2 | 4 | 5 | s3 |
방법 4: 먼저 정렬한 다음 각 그룹에서 첫 번째 항목을 가져옵니다.
Sp
ㅋㅋㅋ 2 | s36 | f | 6 | |
---|---|---|---|---|
아이디어는 여전히 비슷하지만, 구체적인 작성 방법에서 일부 수정이 필요할 수 있습니다. 예를 들어 방법 1과 2는 max 알고리즘을 수정해야 하고, 방법 3은 인덱스를 반환하는 방법을 구현해야 합니다. 어쨌든, groupby 이후에는 각 그룹이 데이터프레임입니다. | 관련 권장 사항: | pandas+dataframe은 행 및 열 선택과 슬라이싱 작업을 구현합니다. | ||
위 내용은 groupby 그룹에서 최대값을 가진 행을 가져오는 pandas 메소드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!