본문 바로가기
서비스 기획/☁️ 데이터 분석 공부

[췻쉿] 한번에 여러 데이터프레임에 함수 적용, csv 파일 추출

by 림뽀 2023. 5. 13.
반응형

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)

 

사진: Unsplash의 Karl Pawlowicz

반응형

댓글