이 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]
답변
이 다양한 것들을보십시오
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')