반응형
Pandas DataFrame cheatsheet
데이터 분석을 한층 편리하게 해 줄 여러 가지 기능들
내가 아직 외우지 못한 기능을 한 번에 찾을 수 있게 모아놨다.
여러 데이터프레임에 같은 함수를 돌려 각각의 csv 파일을 뽑고 싶을 때
- group A, B, C, D의 값이 들어있는 데이터프레임 A_df, B_df, C_df, D_df가 있음
- 각 그룹의 시청시간 합계를 뽑는 함수를 돌리고 csv 파일을 뽑고 싶음
- group이 많아질수록 해당 과정이 점점 번거로워짐
- group별 데이터프레임을 각각 함수에 넣고 csv 파일을 추출하는 과정을 for문으로 자동화
#일일 시청시간 합계, 인당 평균 시청시간을 구하는 함수
def get_daily_duration(df):
duration_df = df.groupby('dt').watch_duration.sum()
user_df = df.groupby('dt').user_id.nunique()
res_df = pd.concat([duration_df, user_df], axis=1)
res_df['avg_duration'] = round(res_df.watch_duration / res_df.user_id, 2)
res_df = res_df.reset_index()
return res_df
#for문으로 A,B,C,D 4개의 사용자군에 get_daily_duration 함수를 적용
#dataframe 리스트와 dataframe 이름 리스트를 별도로 만듦
df_lists = [A_df, B_df, C_df, D_df]
df_names = ['A_df','B_df','C_df','D_df']
for df, name in zip(df_lists, df_names):
get_daily_duration(df).to_csv(f'{name}_duration.csv', index = False)
여러 데이터프레임에 같은 함수를 돌려 하나의 csv 파일을 뽑고 싶을 때
- csv 파일을 여러 개 추출하고 다운로드하는 과정이 번거로울 수 있음
- 그룹을 구분하는 열만 하나 추가하여 하나의 csv 파일로 추출하기
#dataframe 리스트와 dataframe 이름 리스트를 별도로 만듦
df_lists = [A_df, B_df, C_df, D_df]
df_names = ['A_df','B_df','C_df','D_df']
for df, name in zip(df_lists, df_names):
res_df = pd.concat([res_df, df])
res_df.loc[res_df.group.isna(), 'group'] = name
res_df.to_csv(f'duration.csv', index = False)
A 그룹의 사용자와 B 그룹의 사용자 교집합, 합집합 구하기
- set(집합) 함수를 사용하면 편리함
A_users = df[A_condition].user_id.unique()
B_users = df[B_condition].user_id.unique()
#A 사용자와 B 사용자의 교집합 리스트
A_B_users = list(set(A_users) & set(B_users))
len(A_B_users) #교집합 사용자의 수
#A 사용자와 B 사용자의 합집합 리스트
A_B_users = list(set(A_users) | set(B_users))
len(A_B_users) #합집합 사용자의 수
A 컬럼의 비어있는 값을 B 컬럼 값으로 채우고 싶을 때
- 새로운 컬럼에 A 값을 기본으로 채우고, 비어있는 값은 B 값으로 채워 넣는 함수 생성
- apply 적용 시, axis=1 조건을 추가하면 하나의 행(row) 별로 조건을 판단하여 결과 값이 계산됨
#함수 생성
def combine_columns(col1, col2):
if pd.isna(col1):
col1 = col2
return col1
#DataFrame에 적용하기
df['combined_column'] = df.apply(lambda df: combine_columns(df.col1, df.col2), axis=1)
반응형
'서비스 기획 > ☁️ 데이터 분석 공부' 카테고리의 다른 글
[췻쉿] 결측값 처리 (0) | 2023.03.25 |
---|---|
[췻쉿] query, assign, type, 문자열, print (0) | 2023.02.26 |
미국 데이터 분석 석사 선수과목 채우기 (2) | 2022.12.27 |
[췻쉿] DataFrame으로 모든 데이터 모으는 방법 (0) | 2022.12.24 |
주니어 PM의 데이터 분석 학습기 (0) | 2022.08.31 |
댓글