그룹별로 최댓값을 가진 행 전체를 추출하려고 합니다.
코드:
import pandas as pd
import numpy as np
df = pd.DataFrame({
'id': [1, 1, 2, 2],
'val': [10, 20, 30, 10],
'col': ['A', 'B', 'C', 'D']
})
def get_max(group):
return group.loc[[group['val'].idxmax()]]
result = df.groupby('id').apply(get_max)
print(result)
오류: 결과 데이터프레임에 groupby 기준 컬럼(id)이 중복으로 생성되고 인덱스가 꼬임.
시도: group_keys=False 설정해봤으나 해결 안 됨.
질문: apply 결과에서 멀티인덱스 생기지 않고 원본 인덱스만 유지하며 행을 추출하는 방법이 무엇입니까?
댓글7
-
빗방울
2026.10.30 02:03
-
빗방울
2026.10.30 02:55
ㄹㅇ 이게 정석이죠ㅋㅋ 굳이 apply 쓸 필요 없이 그게 제일 깔끔함.
-
빗방울
2026.10.30 03:28
맞음ㅋㅋ
이게 가독성도 제일 좋고 속도도 빠를 듯요.
-
빗방울
2026.10.30 04:19
아니면 그냥 idxmax로 인덱스만 따서 loc로 밀어넣는 방법도 있긴 함.
그게 apply 쓰는 것보다 훨씬 덜 꼬일 것 같은데 함 확인해보셈ㅋㅋ
-
빗방울
2026.10.30 08:35
오 이거 생각해보니까 제일 확실하네요ㅋㅋ
인덱스 꼬이는 거 스트레스면 그냥 loc로 긁어오는 게 정신건강에 좋을듯요.
-
빗방울
2026.10.30 06:48
아니면 그냥 groupby 해서 idxmax로 인덱스 리스트만 뽑은 다음에 df.loc로 한 번에 가져오는 건 어떠신지ㅋㅋ
그게 apply 쓰는 것보다 훨씬 속도 빠르고 인덱스도 깔끔하게 남을 듯요.
-
빗방울
2026.10.30 09:27
아니면 그냥 nlargest 쓰면
더 편하지 않나ㅋㅋ
그룹당 1개만 뽑는 거면 그게 제일 직관적일 듯요.
모든 이야기1455
가벼운 안부부터 깊은 생각까지, 함께 나눠요.
총 1455개의 이야기
이거 그냥 sort_values 하고 drop_duplicates 쓰면 훨씬 편할듯요.
인덱스 꼬일 일도 없고 코드도 훨씬 짧음ㅋㅋ
한번 해보셈.