Pandas (165) 썸네일형 리스트형 판다스 - groupby : 그룹에 따른 결측치 채우기 https://steadiness-193.tistory.com/41 판다스 - groupby : transform(응용) 데이터 불러오기 연도별로 그룹화되어있음을 확인했다. 데이터의 평균과 표준편차의 차이인 표준점수를 구하는 함수를 정의한다. 변환된 데이터의 평균값은 0, 표준편차는 1이된다. 데이터가 �� steadiness-193.tistory.com 이전 포스팅에서 그룹에 따른 결측치를 그룹별 평균으로 채워넣었다. 이번엔 그룹에 따라, 미리 정의된 다른 값을 채워 넣는 경우를 보자 데이터 불러오기 location 별로 그룹화했다. 각 location 별 평균값으로 채워 넣지 않고 그룹별로 정해진 값을 설정한 딕셔너리가 있다면 그 값들로 그룹별 결측치를 채울 수 있다. 각 그룹은 내부적으로 name이.. 판다스 - groupby : 그룹 순회, get_group 데이터 불러오기 타이타닉 데이터를 불러와, 일부 컬럼만을 선택해 df 변수에 넣었다. class 별로 그룹화 = grouped DataFrameGroupBy는 튜플 형태로 (그룹이름, 그룹별 데이터셋(데이터프레임)) 형태로 구성된다. 이를 for loop로 순회하며 볼 수 있다. 그룹별 순회하며 보기 key와 group 두가지로 for loop를 돌면 이처럼 볼 수 있다. get_group() 메서드로 특정 그룹만 가져오기 여기서 Third 그룹만을 가져오고 싶다면 위의 순회와 concat을 이용할 수도 있겠지만 편한 메서드인 get_group()가 있다. get_group 메서드에 키 값을 전달하면 그 그룹만 볼 수 있다. 지금은 Third 그룹인 491행을 가져왔다. 판다스 - groupby : apply, filter 등 주의할 점 groupby를 한 객체를 변수에 넣느냐 넣지않고 진행하느냐에 따라 그룹화에 이용된 컬럼이 남아있는가, 사라지는가가 달라진다. 예시를 들어 살펴보자 데이터 불러오기 244행의 tips 데이터를 불러왔다. 1. groupby한 데이터프레임 객체를 변수에 넣기 그룹별로 입력된 데이터의 개수가 상이하다. 여기서, 10개 초과로 입력된 그룹만 필터링하고자 한다. 그룹화된 객체의 변수인 grouped를 이용하여 filter를 했다. (기존 244행에서 231행으로 줄어들었다.) 이랬더니 그룹화에 이용한 컬럼인 size가 사라졌다. 2. groupby한 데이터프레임 객체를 그대로 이용하기 그룹화에 이용했던 size 컬럼이 그대로 남아있다. 이를 잘 숙지하고 groupby를 이용해야 한다. 판다스 - groupby 메서드들의 활용 방안 [groupby 메서드 들의 결론] apply 1. 시리즈도, 데이터프레임도 받을 수 있다. 2. 개별 원소와 그룹별로도 적용 가능하다. 3. 사용자 함수 사용에 장벽이 없다. 즉, 다방면으로 사용하기 좋다 agg 0. 연산 가능한 컬럼만 알아서 필터링 1. 집계함수 2. [집계함수, 집계함수, ..., 집계함수] 3. {컬럼: 함수, 컬럼: 함수, ..., 컬럼: 함수} transform 0. 연산 가능한 컬럼만 알아서 필터링 1. 기존 인덱스를 유지하며 출력 2. 1번의 장점으로 새로운 열로 추가하기 편함 groupby 메서드를 사용하면서 각각의 메서드를 활용하는데 있어 효율적인 방법들을 나열해봤다. 물론 이것들이 정답은 아니지만 능률적인 측면에서 도움이 되길 바랍니다. 자세한 설명은 이전 포스팅들 .. 판다스 - groupby : apply와 agg의 차이 1. 집계함수 기준 ** func = lambda g: g.mean() grouped.apply(func) 전체 그룹별 집계함수 같다 grouped.agg(func) grouped.agg('mean') grouped.컬럼.apply(func) 그룹의 컬럼별 집계 함수 같다 grouped.컬럼.agg(func) grouped.컬럼.agg('mean') grouped.apply (lambda g: g.컬럼.mean()) 메서드 안의 컬럼 명시 다르다 grouped.agg (lambda g: g.컬럼.mean()) 데이터 불러오기 func = lambda g: g.mean() 전체 그룹별 집계함수 비교 모두 동일하다. 그룹의 컬럼별 집계 함수 이 또한 모두 동일하다. 메서드 안의 컬럼 명시 분명히 다르다. a.. 판다스 - groupby : apply와 transform (차이) [개별 원소] apply transform [공통] 컬럼명을 메서드 밖에서 명시하면 결과는 같게 나온다. [차이1] 컬럼명을 메서드 안에서 명시하면 그룹별 시리즈 리턴 에러 [차이2] 컬럼명을 메서드 안과 밖에 모두 명시하지 않는다면 기존 데이터의 자료형과 함수가 연산 가능해야만 실행된다. 연산 가능한 컬럼만 알아서 필터링되어 결과가 나온다. [차이3] 연산 가능한 컬럼만 함수 적용한다면 그룹별 데이터프레임 출력 (멀티인덱스) 기존 인덱스 유지 데이터 불러오기 타이타닉의 일부데이터를 불러와 class별로 그룹화 했다. 차이를 보기위해 아주 간단한 함수를 정의한다. [공통] 컬럼명을 메서드 밖에서 명시한다면 apply와 transform의 결과는 동일하다. 888번 행은 원래 NaN이기 때문에 False가.. 판다스 - groupby : transform(응용) 데이터 불러오기 연도별로 그룹화되어있음을 확인했다. 데이터의 평균과 표준편차의 차이인 표준점수를 구하는 함수를 정의한다. 변환된 데이터의 평균값은 0, 표준편차는 1이된다. 데이터가 표준화되어 서로 다른 데이터를 쉽게 비교할 수 있다. 그룹별로 lifeExp(기대수명)에 대한 표준점수를 구해보자 굉장히 간단하다. grouped의 lifeExp 컬럼에 transform을 사용자 정의함수로 적용하면 된다. 하나의 컬럼에 적용했기에 시리즈가 리턴된다. transform의 장점이 원본 데이터프레임의 인덱스를 유지하는 것이므로 이를 열 추가에 활용하는 것이다. 새 컬럼이 추가되었다. 이 값은 연도별 기대수명의 표준점수이다. 또 다른 예시를 들어보자 tips에서 total_bill의 일부 값을 NaN으로 변경했다... 판다스 - groupby : transform transform 메서드 그룹별로 구분하여 각 원소에 함수를 적용하지만 그룹별 집계 대신 각 원소의 본래 행 인덱스와 열 이름을 기준으로 연산 결과를 반환 즉, 그룹 연산의 결과를 원본 데이터프레임과 같은 형태로 변형하여 정리하는 것. 말로만 보면 헷갈리니 쉬운 예시로 살펴보자 val 컬럼에 적용해보자 이는 grouped['val'].apply(minus)와 동일한 결과이다. 그렇다면 굳이 transform을 써야할까? 답은 '그렇다' 이다. transform 메서드는 위와 같이 연산 가능한 컬럼에만 적용해서 데이터프레임 형식으로 보여준다. val2 컬럼은 문자열이기 때문에 minus를 할 수 없다. 물론 그룹별로 볼 수 없지만 이를 새 컬럼으로 추가하는 작업 등에는 간단하고 편하다. 다른 예시로 더 살.. 이전 1 ··· 13 14 15 16 17 18 19 ··· 21 다음