본문으로 건너뛰기
Minsing Log
뒤로 가기

pandas dataframe 중복 값 기준으로 row 값들merge하는법

Programming & CS

상황

RAGchain benchmark dataset을 preprocessing하던중 아래와 같이 한 쿼리 id당 여러개의 corpus-id로 retrieval ground truth가 할당되어있는 것을 볼수 있다.

이에 이 데이터셋을 load하여 pandas dataframe으로 convert 하고 pandas의 메서드를 이용해 이 중복 쿼리 id를 병합하면서 corpus id를 동시에 한 row에 list로 담고 싶었다.

해결

self.qrels = self.qrels.groupby('query-id', as_index=False).agg({'corpus-id': lambda x: list(x), 'score': lambda x: list(x)})

self.qrels.groupby('query-id', as_index=False) 부분은 ‘query-id’라는 열을 기준으로 DataFrame을 그룹화한다. as_index=False는 그룹화된 결과에서 ‘query-id’ 열을 인덱스로 사용하지 않도록 설정한다.

.agg({'corpus-id': lambda x: list(x), 'score': lambda x: list(x)}) 부분은 각 그룹에 대해 ‘corpus-id’와 ‘score’ 열의 값을 리스트로 변환한다. 이 때, lambda x: list(x)는 각 그룹의 모든 값을 리스트로 변환하는 함수이다.

따라서 이 코드는 ‘query-id’를 기준으로 DataFrame을 그룹화하고, 각 그룹에 대해 ‘corpus-id’와 ‘score’ 열의 값을 리스트로 변환하는 작업을 수행한다. 이렇게 하면 각 ‘query-id’에 대해 여러 ‘corpus-id’와 ‘score’ 쌍이 있는 경우, 이들을 하나의 리스트로 묶을 수 있다.

groupby 메서드

이 메서드는 DataFrame을 특정 기준에 따라 그룹화한다. 예를 들어, ‘query-id’라는 열을 기준으로 DataFrame을 그룹화하려면 df.groupby('query-id')를 사용할 수 있다. 이렇게 하면 ‘query-id’가 동일한 행들이 하나의 그룹으로 묶이게 된다.

agg 메서드

이 메서드는 각 그룹에 대해 특정 연산을 수행한다. 예를 들어, 각 그룹의 ‘corpus-id’와 ‘score’ 열의 값을 리스트로 변환하려면 df.groupby('query-id').agg({'corpus-id': lambda x: list(x), 'score': lambda x: list(x)})를 사용할 수 있다. 이렇게 하면 각 그룹의 ‘corpus-id’와 ‘score’ 열의 값이 리스트로 변환된다.

이 두 메서드를 함께 사용하면, 특정 기준에 따라 DataFrame을 그룹화하고, 각 그룹에 대해 특정 연산을 수행하는 복잡한 데이터 처리 작업을 수행할 수 있다.

공개 여정 구독

글이 올라오면 이메일로 보내드릴게요.

개발, 창업, 배움, 실패와 회고를 짧고 솔직하게 기록합니다. 검색으로 스쳐가는 독자가 아니라 여정을 따라오는 팬을 만들기 위한 뉴스레터입니다.

뉴스레터는 준비 중입니다. 그동안 RSS 로 구독하거나 이메일 로 알림을 요청해 주세요.


이 글 공유하기:

댓글

GitHub 계정으로 로그인해 댓글을 남길 수 있습니다.


이전 글
유용하고 고오오마운 groupby, agg method 써보기
다음 글
Qrels란