반응형
두 열 A,B를 기준으로 데이터 프레임에서 중복 제거, 다른 열 C에 최대값이 있는 행 유지
두 열(A 및 B)에 따라 중복된 값을 포함하는 팬더 데이터 프레임이 있습니다.
A B C
1 2 1
1 2 4
2 7 1
3 4 0
3 4 8
C열에 최대값이 있는 행을 유지하는 중복을 제거하고 싶습니다.이를 통해 다음을 얻을 수 있습니다.
A B C
1 2 4
2 7 1
3 4 8
저는 그것을 어떻게 하는지 모르겠어요.사용할까요?drop_duplicates()
, 다른 거?
다음 방법으로 그룹을 사용하여 작업할 수 있습니다.
c_maxes = df.groupby(['A', 'B']).C.transform(max)
df = df.loc[df.C == c_maxes]
c_maxes
가Series
의 최댓값의C
각 그룹에서 동일한 길이와 동일한 지수를 가진df
. 사용하지 않으신 경우.transform
그다음에 인쇄하기c_maxes
어떻게 작동하는지 확인해 보는 것이 좋을 것 같습니다.
를 이용한 또 다른 접근법drop_duplicates
되지요
df.sort('C').drop_duplicates(subset=['A', 'B'], take_last=True)
어떤 것이 더 효율적인지는 잘 모르겠지만 분류가 필요 없는 첫 번째 방법인 것 같습니다.
편집: 보낸 사람pandas 0.18
두번째 해결책은
df.sort_values('C').drop_duplicates(subset=['A', 'B'], keep='last')
아니면, 아니면,
df.sort_values('C', ascending=False).drop_duplicates(subset=['A', 'B'])
여하튼.groupby
솔루션의 성능이 크게 향상된 것으로 보입니다.
%timeit -n 10 df.loc[df.groupby(['A', 'B']).C.max == df.C]
10 loops, best of 3: 25.7 ms per loop
%timeit -n 10 df.sort_values('C').drop_duplicates(subset=['A', 'B'], keep='last')
10 loops, best of 3: 101 ms per loop
팬더 드롭 복제 기능으로 간단하게 할 수 있습니다.
df.drop_duplicates(['A','B'],keep= 'last')
저는 그룹비가 효과가 있어야 한다고 생각합니다.
df.groupby(['A', 'B']).max()['C']
데이터 프레임이 필요한 경우 재설정 인덱스 호출을 체인으로 연결할 수 있습니다.
df.groupby(['A', 'B']).max()['C'].reset_index()
같이 하시면 됩니다.drop_duplicates
원하시는 대로
# initialisation
d = pd.DataFrame({'A' : [1,1,2,3,3], 'B' : [2,2,7,4,4], 'C' : [1,4,1,0,8]})
d = d.sort_values("C", ascending=False)
d = d.drop_duplicates(["A","B"])
동일한 주문을 받는 것이 중요한 경우
d = d.sort_index()
언급URL : https://stackoverflow.com/questions/32093829/remove-duplicates-from-dataframe-based-on-two-columns-a-b-keeping-row-with-max
반응형
'source' 카테고리의 다른 글
SQL 구문에 오류가 있습니다. MySQL 서버 버전에 해당하는 설명서에서 다음에 사용할 올바른 구문을 확인하십시오. (0) | 2023.10.11 |
---|---|
mysqli::mysqli(): (HY000/2002):소켓 'MySQL'을 통해 로컬 MySQL 서버에 연결할 수 없음 (2) (0) | 2023.10.11 |
Node.js와 함께 밑줄 모듈 사용 (0) | 2023.10.11 |
주어진 url로 이미지가 존재하는지 확인하는 방법은? (0) | 2023.10.11 |
git receive 전 후크가 heroku와 함께 감소했습니다. (0) | 2023.10.11 |