[PYTHON] Python (pandas) : 다른 열에 최대 값을 갖는 행을 유지하는 두 개의 열을 기반으로 중복 제거
PYTHONPython (pandas) : 다른 열에 최대 값을 갖는 행을 유지하는 두 개의 열을 기반으로 중복 제거
두 개의 열 (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 (), 다른 뭔가를 사용해야합니까?
해결법
-
==============================
1.다음을 기준으로 그룹을 사용하여 수행 할 수 있습니다.
다음을 기준으로 그룹을 사용하여 수행 할 수 있습니다.
c_maxes = df.groupby(['A', 'B']).C.transform(max) df = df.loc[df.C == c_maxes]
c_maxes는 각 그룹에서 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 (부분 집합 [[A ','B '], 유지 ='마지막 ') 또는 df.sort_values ('C ' 오름차순 = 거짓) .drop_duplicates (하위 집합 = [ '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
-
==============================
2.나는 groupby가 일해야한다고 생각해.
나는 groupby가 일해야한다고 생각해.
df.groupby(['A', 'B']).max()['C']
데이터 프레임이 필요하다면 재설정 된 인덱스 호출을 연결할 수 있습니다.
df.groupby(['A', 'B']).max()['C'].reset_index()
-
==============================
3.pandas drop duplicates 함수를 사용하여 간단히이 작업을 수행 할 수 있습니다.
pandas drop duplicates 함수를 사용하여 간단히이 작업을 수행 할 수 있습니다.
df.drop_duplicates(['A','B'],keep= 'last')
-
==============================
4.원하는대로 drop_duplicates로 할 수 있습니다.
원하는대로 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()
from https://stackoverflow.com/questions/32093829/pythonpandas-removing-duplicates-based-on-two-columns-keeping-row-with-max-va by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 파이썬에서 최대 재귀 수준 (0) | 2018.10.31 |
---|---|
[PYTHON] ISO 8601 형식의 날짜를 어떻게 파싱합니까? (0) | 2018.10.31 |
[PYTHON] sqlAlchemy를 사용하는 저장 프로 시저 (0) | 2018.10.31 |
[PYTHON] 판다에서 행 평균 계산 (0) | 2018.10.31 |
[PYTHON] 파이썬에서 거대한 CSV 파일의 무작위 라인 읽기 (0) | 2018.10.31 |