Python Panda에서 여러 열에 걸쳐 중복된 모든 행 삭제
그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 : 모든 중복을 삭제합니다.
설정keepFalse로 하면 원하는 답변을 얻을 수 있습니다.
DataFrame.drop_duplicates(*args, **kwargs) 중복행 삭제 후 DataFrame 반환(옵션으로 특정 열만 고려)
매개 변수: 하위 집합: 열 레이블 또는 레이블 시퀀스, 선택적 중복 식별을 위해 특정 열만 고려합니다. 기본적으로 모든 열 keep: {'first', 'last', False, 기본 'first' first: 첫 번째 열을 제외하고 중복 항목을 삭제합니다.last : 마지막 오카렌스를 제외하고 중복을 삭제합니다.False : 모든 중복을 삭제합니다.take_last : 폐지된 inplace : boolean, 기본 False 중복을 폐기할지 또는 복사 콜을 반환할지 : kwargs only 인수 of subset [deplicated] 반환: deduplicated : DataFrame
결과를 다른 데이터 세트에 저장하는 경우:
df.drop_duplicates(keep=False)
또는
df.drop_duplicates(keep=False, inplace=False)
동일한 데이터 세트를 업데이트해야 하는 경우:
df.drop_duplicates(keep=False, inplace=True)
위의 예에서는 다음과 같이 모든 중복을 제거하고 1개를 유지합니다.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)
이 다양한 것들을 시도해 보세요
df = pd.DataFrame({"A":["foo", "foo", "foo", "bar","foo"], "B":[0,1,1,1,1], "C":["A","A","B","A","A"]})
>>>df.drop_duplicates( "A" , keep='first')
또는
>>>df.drop_duplicates( keep='first')
또는
>>>df.drop_duplicates( keep='last')
실제로 드롭 행 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-across-multiple-columns-in-python-pandas
'programing' 카테고리의 다른 글
| MariaDB vs Drizle vs Percona Server vs MySQL (0) | 2023.01.24 |
|---|---|
| 잘못된 DateTime 값 '0000-00 00:00:00' - Date_Sub()가 있는 경우 (0) | 2023.01.24 |
| MySQL에서 데이터베이스 간에 테이블 이동 (0) | 2023.01.15 |
| 휘발성이 높은가요? (0) | 2023.01.15 |
| 로컬 호스트에서 메일을 보내도록 XAMPP를 설정하려면 어떻게 해야 합니까? (0) | 2023.01.15 |