Python

[Pandas] - groupby() / 특정 데이터에 접근

yugyeong 2022. 11. 24. 17:33

 

groupby( )

 

데이터프레임에서 카테고리별로 묶어서 값을 나타내고싶다면 groupby() 를 이용하면 된다.

 

같은 년도의 연봉의 합을 구해라 라는 문제가 있다면, 

먼저 'Year' 컬럼을 동일한 값들끼리 카테고리를 나눠주기 위해서 df.groupby('Year')을 해준다.

 

다음은 묶은 년도의 Salary 컬럼에 접근을 할 것이다.  df.groupby('Year')['Salary'] 라고 해주면 된다.

그 후 최종 목표인 Salary의 합을 구해준다.

df.groupby('Year')['Salary'].sum() 을 하면 각 카테고리별로 묶은 Salary의 합을 출력해준다.

 

 

 

 

 

각 이름별로의 연봉 평균을 구하고자 할 때도 위와 동일한 방법으로 groupby 를 이용하여 하나씩 접근을 하면 된다.

mean()은 평균을 구하는 함수이다.

 

 

 

년도별로 연봉의 총합, 평균, 표준편차를 한번에 나타낼 때에는 agg()를 이용한다.

.agg()괄호 안에는 넘파이에서 이용되는 np.sum, np.mean, np.std 를 넣어서 각 값들을 출력한다.

 

 

 

데이터프레임에서 Name 컬럼에 각 이름 카테고리별로 몇 개의 데이터가 있는지 확인하는 문제이다.

 

먼저 df.groupby('Name')를 이용하여 Name에 접근을 한 후 이름별로 몇개의 데이터가 있는지 알아야하기 때문에 대괄호에 ['Name']을 쓴 후 갯수를 세어주는 count()를 이용한다.

 

결과는 df.groupby('Name')['Name'].count() 와 같은 형태가 나온다.

 

위 과정을 간단하게 나타낸 함수가 value_counts() 이다

각 카테고리별로 동일한 데이터가 몇개 있는지 리턴해주는 함수이다.

 

df['Name'].value_countscounts() 을 해주면 Name 컬럼에 동일한 Name 이 몇개 있는지 리턴해준다.

 

 

 

 

 

 

특정 데이터에 접근하기

 

 

아래와같은 데이터프레임이 있을 때, 특정 데이터에 접근하여 컬럼 또는 인덱스 데이터 가져오는 방법이다

 

 

먼저, 경력( Year of Experience )이 3년 이상인 사람의 데이터를 가져오는 방법이다.

df['Years of Experience'] 3 이상인 경우에 먼저 접근을 한 후, 접근한 데이터의 데이터프레임을 가져와야 하기 때문에 다시 한 번 더 대괄호로 감싸준 후 앞에 데이터프레임명을 써준다.

=> df[df['Year of Experience'] >= 3]과 같은 형태이다.

 

 

두번째는 .loc[ ]를 이용하는 방법이다.

 

df['Years of Experience'] >= 3 에 억세스 한 후 .loc를 이용한다.

.loc[ 가져오고자 하는 행,  가져오고자 하는 열 ] 와 같은 형태이기 때문에 df.loc[ df['Years of Experience'] >= 3 , ] 로 적어준다.

 

 

 

 

 

 

두번째 예시는 경력이 3년 이상인 사원의 이름과 연봉을 가져와라 이다.

 

 

먼저 .loc 방법이다.

위와 동일하게 경력이 3년 이상인 경우에 접근을 한다. df.loc[ df['Years of Experience'] >= 3 , ]

그리고 사원의 이름과 연봉을 가져와야하기 때문에 .loc[ 가져오고자 하는 행,  가져오고자 하는 열 ] 형태에서 가져오고자 하는 열에 ['Employee Name','Salary [$/h]'] 를 리스트 형식으로 넣어준다.

 

 

 

그리고 두번째 방법인 df[df['Years of Experience']>=3][['Employee Name','Salary [$/h]']] 에서는 

df['Years of Experience']>=3]인 사람의 ['Employee Name','Salary [$/h]'] 사원명과 연봉을 가져온 후 대괄호로 감싸준 다음 데이터프레임명을 한 번 더 써준다.

그럼 아래와같은 결과가 나오게 된다.