[PYTHON] Python - 두 개의 열 조합을 기반으로 데이터 프레임에서 중복을 삭제 하시겠습니까?
PYTHONPython - 두 개의 열 조합을 기반으로 데이터 프레임에서 중복을 삭제 하시겠습니까?
파이썬에서 3 열의 데이터 프레임이 있습니다.
Name1 Name2 Value
Juan Ale 1
Ale Juan 1
이름 1과 이름 2의 열을 기반으로 중복을 제거하고자합니다.
내 예제에서는 두 행이 동일하지만 (다른 순서로 있음) 두 번째 행을 삭제하고 첫 번째 행만 유지하므로 최종 결과는 다음과 같아야합니다.
Name1 Name2 Value
Juan Ale 1
어떤 아이디어가 정말 감사하겠습니다!
해결법
-
==============================
1.frozenset으로 변환하여 pd.DataFrame.duplicated를 사용할 수 있습니다.
frozenset으로 변환하여 pd.DataFrame.duplicated를 사용할 수 있습니다.
res = df[~df[['Name1', 'Name2']].apply(frozenset, axis=1).duplicated()] print(res) Name1 Name2 Value 0 Juan Ale 1
duplicate는 해시를 사용하여 중복을 확인하기 때문에 set 대신에 frozenset이 필요합니다.
행보다 열의 확장 성이 좋습니다. 행 수가 많은 경우 @ Wen의 정렬 기반 알고리즘을 사용하십시오.
-
==============================
2.중복 된 np.sort 사용
중복 된 np.sort 사용
df[pd.DataFrame(np.sort(df[['Name1','Name2']].values,1)).duplicated()] Out[614]: Name1 Name2 Value 1 Ale Juan 1
공연
df=pd.concat([df]*100000) %timeit df[pd.DataFrame(np.sort(df[['Name1','Name2']].values,1)).duplicated()] 10 loops, best of 3: 69.3 ms per loop %timeit df[~df[['Name1', 'Name2']].apply(frozenset, axis=1).duplicated()] 1 loop, best of 3: 3.72 s per loop
-
==============================
3.이 질문에 대해 다소 늦은 것 같지만 어쨌든 내 기부를 해주십시오. :)
이 질문에 대해 다소 늦은 것 같지만 어쨌든 내 기부를 해주십시오. :)
get_dummies를 사용하여 해시 가능한 행을 만드는 좋은 방법을 추가 할 수도 있습니다.
df[~(pd.get_dummies(df.a).add(pd.get_dummies(df.b), fill_value=0)).duplicated()]
시간은 @ Wen의 답변만큼 좋지 않지만 apply + frozen_set보다 빠릅니다.
df=pd.concat([df]*1000000) %timeit df[~(pd.get_dummies(df.a).add(pd.get_dummies(df.b), fill_value=0)).duplicated()] 1.8 s ± 85 ms per loop (mean ± std. dev. of 7 runs, 1 loop each) %timeit df[pd.DataFrame(np.sort(df[['a','b']].values,1)).duplicated()] 1.26 s ± 19 ms per loop (mean ± std. dev. of 7 runs, 1 loop each) %timeit df[~df[['a', 'b']].apply(frozenset, axis=1).duplicated()] 1min 9s ± 684 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
from https://stackoverflow.com/questions/51182228/python-delete-duplicates-in-a-dataframe-based-on-two-columns-combinations by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 상위 폴더 하위 폴더에서 상대 가져 오기 모듈 (0) | 2018.11.23 |
---|---|
[PYTHON] PyCharm에서 Django 테스트 실행하기 (0) | 2018.11.23 |
[PYTHON] Numpy dot은 대칭 곱셈에 대해서 너무 똑똑하다. (0) | 2018.11.23 |
[PYTHON] 기존의 TensorFlow 계산 그래프를 수정할 수 있습니까? (0) | 2018.11.23 |
[PYTHON] Windows, Python 2.6에 PygraphViz 설치하기 (0) | 2018.11.23 |