개발공부

[Python] Pandas Dataframe 조건을 만족하는 데이터 얻기, apply()(=함수를 이용해 얻기) 본문

Python/Pandas

[Python] Pandas Dataframe 조건을 만족하는 데이터 얻기, apply()(=함수를 이용해 얻기)

mscha 2022. 5. 3. 13:12
import pandas as pd
df = pd.DataFrame({'Employee ID':[111, 222, 333, 444],
                   'Employee Name':['Chanel', 'Steve', 'Mitch', 'Bird'],
                   'Salary [$/h]':[35, 29, 38, 20],
                   'Years of Experience':[3, 4 ,9, 1]})
df

 

판다스 데이터프레임에서는 True와 False로 결과가 나오는 식을 [ ] 안에 입력하면 그에 맞는 데이터를 찾을 수 있다.

아래의 예로 이해해 보자

# 경력이 3년 이상인 사람의 데이터를 가져오기
>>> df['Years of Experience'] >= 3
0     True
1     True
2     True
3    False
Name: Years of Experience, dtype: bool

>>> df.loc[ df['Years of Experience'] >= 3, ]

위와 같이 df에서 조건에 만족하는 행들을 찾은 후 이를 loc함수를 이용해서 True인 행들만 찾을 수 있다.

 

다른 예들을 계속 봐보자.

# 경력이 3년 이상인 사람의, 이름과 시급 정보를 가져오시오
# [조건을 만족하는 행, 얻고자하는 열]
df.loc[ df['Years of Experience'] >= 3, ['Employee Name', 'Salary [$/h]']]

 

# 경력이 3년 이상이고, 8년 이하인 사람의 데이터를 가져오시오
cond = (df['Years of Experience'] >= 3) & (df['Years of Experience'] <= 8)
df.loc[ cond , ]

위와 같이 &와 | 기호를 통해 and, or 연산도 할 수 있다.

 

apply()

 - 함수를 사용하여 원하는 데이터를 저장할 수 있다.

# 시급이 30이상이면, A 그룹
# 그렇지 않으면 B 그룹이라고 구분할 것이다.
# 따라서 새로운 컬럼 gorup 컬럼을 만들어서, A 나 B 값으로 저장하시오.

def grouping(salary) :
    if salary >=30:
        return 'A'
    else :
        return 'B'
        
df['Salary [$/h]'].apply(grouping)

df['group'] = df['Salary [$/h]'].apply(grouping)
df