Data scientist/Python

파이썬 python | 판다스 데이터프레임 pandas dataframe | 조건부 열 삭제하기 duplicated(), drop(), reset_index()

작은벼리 2021. 5. 12. 19:23

 

🎲 데이터프레임에서 조건에 해당하는 중복값만 제거하는 방법 

 

V 상황: school이라는 데이터로 dataframe이 존재함

V 삭제 조건:

  1. classes 값과 students값이 중복될 때(아래에서 index 0, 1, 2, 3, 8, 9)

  2. 중복되는 첫 값을 제거하고(제거 후 index 1, 3, 9)

  3. classes가 'A' 인 것만 뽑아 보기(출력 index 1, 3) 

>>> school = {'classes' : ['A','A','A','A','A','A','B','B','C','C'], \
    'students' :['김','김','이','이','최','박','이','박','김','김'], \
    '취미' : ['피아노','노래','태권도','영화감상','컴퓨터','게임','게임','게임','게임','게임']}

>>> df = pd.DataFrame(school)

>>> df
	classes	students	취미
0	A	김	피아노
1	A	김	노래
2	A	이	태권도
3	A	이	영화감상
4	A	최	컴퓨터
5	A	박	게임
6	B	이	게임
7	B	박	게임
8	C	김	게임
9	C	김	게임

# students와 classes 값이 중복인 경우
#(뒤에 오는 idnex는 남기기, keep을 first로 해주면 앞에 오는 값을 남길 수 있음) 
>>> c1 = df[['students','classes']].duplicated(keep='last')
0     True
1    False
2     True
3    False
4    False
5    False
6    False
7    False
8     True
9    False
dtype: bool

# classes가 'A' 인 경우
>>> c2 = (df['classes'] == 'A')
0     True
1     True
2     True
3     True
4     True
5     True
6    False
7    False
8    False
9    False
Name: classes, dtype: bool

>>> delete_list = list(df[(c1 & c2)].index)

>>> delete_list
[0, 2]

# df.drop 함수 안에 delete할 list를 넣어줌 
# inplace가 True 여야 df를 수정해줌(안 하면 이 라인 이후로 df를 찍었을 때 수정된 df 반영이 안됨) 
>>> df.drop(delete_list, inplace=True)
	classes	students	취미
1	A	김	노래
3	A	이	영화감상
4	A	최	컴퓨터
5	A	박	게임
6	B	이	게임
7	B	박	게임
8	C	김	게임
9	C	김	게임

# index를 리셋 해준다
>>> df.reset_index(drop=True, inplace=True)
	classes	students	취미
0	A	김	노래
1	A	이	영화감상
2	A	최	컴퓨터
3	A	박	게임
4	B	이	게임
5	B	박	게임
6	C	김	게임
7	C	김	게임