여러 열과 여러 행 (200k)이있는 큰 데이터 프레임이 있습니다. 그룹 변수로 행을 정렬하고 각 그룹은 하나 이상의 항목을 가질 수 있습니다. 각 그룹의 다른 열은 동일한 값을 가져야하지만 일부 경우에는 그렇지 않습니다. 다음과 같이 보입니다.
group name age color
1 Anton 50 orange
1 Anton 21 red
1 Anton 21 red
2 Martin 78 black
2 Martin 78 blue
3 Maria 25 red
3 Maria 29 pink
4 Jake 33 blue
연령이나 색상이 그룹의 모든 행에 대해 동일하지 않은 경우 그룹의 모든 항목을 삭제하고 싶습니다. (관찰 오류 표시) 그러나 모든 열이 동일한 값을 가질 경우 중복 된 항목을 유지하고 싶습니다. 따라서 기대하는 출력은 다음과 같습니다.
group name age color
2 Martin 78 black
2 Martin 78 blue
4 Jake 33 blue
비슷한 경우에 매우 빠르게 작동하는이 함수를 사용했습니다. df = df.groupby ( 'group'). filter (lambda x : x.count () == 1)
그러나 이것은 열의 값 (연령, 색상)을 확인할 수 없습니다. 나는 groupby 기능을 가지고 놀았지만 그것을 이해하지 못하는 것 같습니다.
/ e : 내 질문에서 중요한 조건을 놓쳤다는 것을 깨달았습니다. 하나 또는 여러 개의 SPECIFIC 열에 중복 값이있는 경우에만 관측 값을 삭제하고 싶습니다. 그러나 다른 열은 다를 수 있습니다. 위의 예에서 그룹 내 색상 차이는 상관 없지만 나이가 다른 값인지 확인하고 싶다고 가정 해 보겠습니다. (이를 반영하기 위해 예제를 편집했습니다) 실제 사례는 더 일반적입니다 더 많은 열이 포함되어 있으므로 관찰을 삭제할 때 몇 개의 열을 확인하고 다른 열을 무시하고 싶습니다.
@ismax의 대답이 작동하는 동안 .count()
솔루션 과 유사한 패턴을 사용할 수 있지만 먼저 중복을 삭제 하십시오 .
In [229]: In [179]: df.groupby('group').filter(lambda x: len(x.drop_duplicates(subset=['age'])) == 1)
Out[229]:
group name age color
3 2 Martin 78 black
4 2 Martin 78 blue
7 4 Jake 33 blue
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다