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 김 게임