Python Pandas에서 모든 중복 행을 삭제하십시오.
이 pandas
drop_duplicates
기능은 데이터 프레임을 "고유 화"하는 데 유용합니다. 그러나 전달할 키워드 인수 중 하나는 take_last=True
또는 take_last=False
입니다. 열의 하위 집합에서 중복되는 모든 행을 삭제하고 싶습니다. 이게 가능해?
A B C
0 foo 0 A
1 foo 1 A
2 foo 1 B
3 bar 1 A
예를 들어, 나는 열을 일치 행 드롭 싶습니다 A
및 C
행 0과 1을 삭제해야이 정도.
drop_duplicates 와 keep 매개 변수를 사용하면 팬더에서 훨씬 쉽습니다 .
import pandas as pd
df = pd.DataFrame({"A":["foo", "foo", "foo", "bar"], "B":[0,1,1,1], "C":["A","A","B","A"]})
df.drop_duplicates(subset=['A', 'C'], keep=False)
drop_duplicates에 대한 Ben의 답변에 추가하고 싶습니다 .
keep
: { 'first', 'last', False}, 기본 'first'
first : 첫 번째 발생을 제외하고 중복을 삭제합니다.
last : 마지막 발생을 제외하고 중복을 삭제합니다.
False : 모든 중복을 삭제합니다.
keep
False로 설정 하면 원하는 답변을 얻을 수 있습니다.
DataFrame.drop_duplicates (* args, ** kwargs) 선택적으로 특정 열만 고려하여 중복 행이 제거 된 DataFrame을 반환합니다.
매개 변수 : 하위 집합 : 열 레이블 또는 레이블 시퀀스 (선택 사항) 중복을 식별하기 위해 특정 열만 고려하십시오. 기본적으로 모든 열을 유지하십시오 : { 'first', 'last', False}, default 'first'first : 중복 제거 첫 번째로. last : 마지막 발생을 제외하고 중복을 삭제합니다. False : 모든 중복을 삭제합니다. take_last : 더 이상 사용되지 않는 inplace : boolean, default False 복제본을 제자리에 놓을 지 아니면 복사 열을 반환할지 여부 : kwargs 하위 집합의 인수 만 [deprecated] 반환 값 : deduplicated : DataFrame
결과를 다른 데이터 세트에 저장하려면 다음을 수행하십시오.
df.drop_duplicates(keep=False)
또는
df.drop_duplicates(keep=False, inplace=False)
동일한 데이터 세트를 업데이트해야하는 경우 :
df.drop_duplicates(keep=False, inplace=True)
위의 예제는 모든 복제본을 제거하고 DISTINCT *
SQL 과 유사하게 하나를 유지합니다.
사용 groupby
및filter
import pandas as pd
df = pd.DataFrame({"A":["foo", "foo", "foo", "bar"], "B":[0,1,1,1], "C":["A","A","B","A"]})
df.groupby(["A", "C"]).filter(lambda df:df.shape[0] == 1)
실제로, 행 0과 1을 삭제하면 일치합니다 (일치하는 A와 C를 포함하는 모든 관측치가 유지됨).
In [335]:
df['AC']=df.A+df.C
In [336]:
print df.drop_duplicates('C', take_last=True) #this dataset is a special case, in general, one may need to first drop_duplicates by 'c' and then by 'a'.
A B C AC
2 foo 1 B fooB
3 bar 1 A barA
[2 rows x 4 columns]
그러나 나는 당신이 정말로 원하는 것이 이것이라고 생각합니다 (일치하는 A와 C를 포함하는 하나의 관찰은 유지됩니다).
In [337]:
print df.drop_duplicates('AC')
A B C AC
0 foo 0 A fooA
2 foo 1 B fooB
3 bar 1 A barA
[3 rows x 4 columns]
편집하다:
이제 훨씬 더 명확합니다.
In [352]:
DG=df.groupby(['A', 'C'])
print pd.concat([DG.get_group(item) for item, value in DG.groups.items() if len(value)==1])
A B C
2 foo 1 B
3 bar 1 A
[2 rows x 3 columns]
참고 URL : https://stackoverflow.com/questions/23667369/drop-all-duplicate-rows-in-python-pandas
'programing tip' 카테고리의 다른 글
Windows 서비스로 node.js를 설치하는 방법? (0) | 2020.07.15 |
---|---|
파이썬에서 numpy 행렬의 길이 (또는 크기, 크기)를 어떻게 찾습니까? (0) | 2020.07.15 |
인라인 CSS에서 CSS : before 및 : after 유사 요소를 사용합니까? (0) | 2020.07.14 |
NSCache를 사용하는 방법 (0) | 2020.07.14 |
저장 프로 시저에 대한 명명 규칙은 무엇입니까? (0) | 2020.07.14 |