예제
import pandas as pd
data = {'반': ['A', 'A', 'A', 'B', 'B', 'B'],
'점수': [91, 90, 80, 90, 80, 70],
'국어': ['김판다', float('nan'), float('nan'), '최진환', float('nan'), float('nan')],
'영어': [float('nan'), '조민영', '안지선', float('nan'), '박연준', '권보아'],
'수학': [float('nan'), float('nan'), '강승주', float('nan'), float('nan'), '임재범']}
df = pd.DataFrame(data)
NaN 위치에 데이터를 끌어 올려 다음과 같은 데이터를 만들어 보자.
이럴 때 transform 함수를 이용해 재구성할 수 있다.
out = (df.set_index(['반', '점수'])
.groupby(level=0)
.transform(lambda s: s.sort_values(key=lambda x: x.isna()).values)
.dropna(how='all').droplevel(1).reset_index()
)
out:
어렵다면 언피벗을 활용한 다음 코드를 사용해도 좋다.
out = (df.melt(['반', '점수']).dropna(subset='value')
.assign(cc=lambda x: x.groupby(['반', 'variable']).cumcount())
.pivot(index=['반', 'cc'], columns='variable', values='value')
.droplevel(1).reset_index().rename_axis(None, axis=1)
.reindex(df.columns.drop('점수'), axis=1)
)
결과는 동일하다.
유튜브에서 판다스 강의 중입니다
https://www.youtube.com/@KimPandas
'판다스 > 판다스 팁' 카테고리의 다른 글
[pandas] 특정 대상만 끌어 올려 정렬하기 (0) | 2024.03.28 |
---|---|
[pandas] 정해진 임의 순서로 정렬 하기 (0) | 2024.03.28 |
[pandas] datetime을 연도와 쿼터를 표기하는 문자열로 변환하고 싶을 때 (0) | 2024.03.18 |
[pandas] NaN이 포함된 열에서 정수를 유지하는 방법 (0) | 2024.02.27 |
[pandas] 문자열에서 정규 표현식으로 그룹을 활용하는 방법 (0) | 2024.02.27 |