suffixes=('_left','_right')
# 기본 작성구문으로, 디폴트값은 inner join
# 공통컬럼값은 합쳐져 하나의 컬럼으로 출력
merge_df = pd.merge(df2,df3)
# 위 코드와 동일한 기능입니다. on 절을 사용할 수 있어요.
merge_df = pd.merge(df2,df3, how='inner', on='Customer ID')
# 공통컬럼이 2개 이상일 때
merge_df = pd.merge(df2, df3, how='inner', on=['공통컬럼1','공통컬럼2'])
# 기준열 이름이 다를 때
merge_df = pd.merge(df2,df3, how='inner', left_on = 'Customer ID', right_on = 'user id')
# 공통컬럼을 개별로 출력하고 싶을 때
merge_df = pd.merge(df2,df3, how='inner', on='Customer ID', suffixes=('_left','_right'))
merge할 때 키를 작성하지 않으면 기본적으로 두 데이터프레임에서 동일한 이름을 가진 모든 열(column)을 기준으로 병합돼요!
공통된 열이 있을 경우 그 열을 자동으로 병합의 기준으로 합쳐주는데, 공통된 열이 없으면 오류가 발생할 수 있습니다.
pandas 의 함수 중 하나
인덱스 기준으로 테이블을 병합
인덱스 기준으로 다양한 옵션을 통해 조인을 할 수 있음
잘 쓰지 않음
# 단순 조인
df2.join(df3)
# join 방식 설정
df2.join(df3, how='right')
# join시 이름이 같은 컬럼이 있을 경우, 옵션으로 설정하여 조인 가능
df.join(df2) # 오류 → 이름이 같은 컬럼이 있으면 안 됨
df.join(df2,how='left', lsuffix='1', rsuffix='2')
# join 이후, 인덱스 정렬하기
df.join(df2,how='left', lsuffix='1', rsuffix='2', sort=True)
# 기본 작성구문
pd.concat([df2, df3])
# 세로로 결합
pd.concat([df2, df3], axis=0, ignore_index=True, join='inner')
# 가로로 결합
pd.concat([df2, df3], axis=1, ignore_index=True, join='inner')
# 단순 결합, 없는 건 NaN으로 처리되고 결합
# df2 가 df 의 아래로 붙음
df.append(df2)
구분 | Merge | Join |
---|---|---|
결합 기준 | 컬럼을 기준으로 두 데이터프레임을 결합(보다 유연성이 높습니다.) | 인덱스를 기준으로 두 데이터프레임을 결합 |
응용 | 결합의 기준이 되는 컬럼을 지정 | 결합의 기준이 되는 컬럼을 지정할 수도 있고, 인덱스를 기준으로 결합할 수도 있음 |
사용법 | 판다스 Library 의 함수 중 하나로, 두 데이터프레임을 input 값으로 받습니다. | 기준이 되는 dataframe의 메서드 형태로 호출되며, 결합할 테이블 1개를 인자로 받습니다. |
구분 | Concat | Append |
---|---|---|
결합 기준 | 수직, 수평결합 모두 가능 | 수직결합만 가능 |
집계 함수 | 코드 |
---|---|
합계 | aggfunc =’sum’ |
평균 | aggfunc = ‘mean’ |
표준편차 | aggfunc = 'std’ |
갯수 | aggfunc = 'count’ |
갯수(중복제거) | aggfunc = 'nunique’ |
최대값 | aggfunc = ‘max’ |
최소값 | aggfunc = ‘min’ |
fill_value
dropna
sort
열로 리스트 형태가 입력될 경우
# age 라는 축을 기준으로 카테고리별 고객id 카운트
pd.pivot_table(df2, index='Age', columns='Category', values='Customer ID', aggfunc='count')
# age, Category 라는 축을 기준으로 성별 Previous Purchases 최소, 최대값 구하기
pd.pivot_table(df2, index=['Age','Category'],columns='Gender', values='Previous Purchases', aggfunc=['min','max'])
age | category | gender | gender |
---|---|---|---|
20대 | 장난감 | Previous Purchases(min) | Previous Purchases(max) |
20대 | 의류 |
# 성별을 축으로 하고, 사이즈, 나이별 고객id 고유하게 카운트
pd.pivot_table(df2, index=['Gender'],columns=['Size','Age'], values='Customer ID', aggfunc='nunique')
# 1.기본 표현구문
lambda 매개변수 : 표현식
------------------------------------------------
#2.이해하기
들어온 값에 2를 곱해서 반환한다면 lambda x : x * 2
------------------------------------------------
#3.기존 함수 작성방식과 비교하기
#두 수를 더하는 함수
def plus(a,b):
return a+b
plus(10,40)
>> 50
#두 수를 더하는 함수 - 람다 형식
(lambda a,b: a + b)(10, 40)
# lambda 함수를 이용한 홀수 출력하기
mylist = [1, 2, 3, 4, 5]
mylist2 = list(filter(lambda x: x%2 == 1, mylist))
print(mylist2)
# lambda 함수를 이용한 정렬
mylist = ['apple', 'banana', 'cherry']
mylist2 = sorted(mylist, key=lambda x: len(x))
print(mylist2)
# 예시 문자열 선언
s = "aa.bb.cc.dd.ee.ff.gg"
s |
---|
aa.bb.cc.dd.ee.ff.gg |
# '.' 구분자를 기준으로 데이터를 나눔
# 아래 두 코드 결과 동일
s.split('.')
s.split(sep='.')
aa | bb | cc | dd | ee | ff | gg |
★아래 내용이 핵심★: 컬럼으로 받기
# '.' 구분자를 기준으로 데이터를 나누고 컬럼으로 받음
# lambda 함수와 결합하여 사용하는 경우
# 7번 반복, a 를 컬럼 구분자로 받아주고, format 함수를 통해 a0, a1, a2 ... 로 표기
# lambda 함수를 통해 '.' 로 구분. 단, len(x.split('.')), 즉 7 보다 i 가 작을 때 수행
# 중요
for i in range(7):
df2["a{}".format(i)] = df2['x'].apply(lambda x: x.split('.')[i] if len(x.split('.'))>i else None)
a0 | a1 | a2 | a3 | a4 | a5 | a6 |
---|---|---|---|---|---|---|
aa | bb | cc | dd | ee | ff | gg |
from datetime import datetime
from dateutil.rrule import rrule, DAILY, TU
# 라이브러리 불러오기
from datetime import datetime
from dateutil.rrule import rrule, DAILY, TU
# 시작 날짜, 종료날짜
start_date = datetime(2024, 2, 1)
end_date = datetime(2024, 3, 1)
# 2024-02-01 부터 2024-03-01 까지 strf 사용하여 원하는 데이터 형식으로 출력.
weekly_rule = rrule(DAILY, dtstart=start_date, until=end_date)
for date in weekly_rule:
print(date.strftime('%Y-%m-%d'))
# 빈 리스트 생성 후 날짜를 담아주기
a=[]
for date in weekly_rule:
a.append(date.strftime('%Y-%m-%d'))
# 2023-02-01 부터 2023-03-01 까지 strf 사용하여 원하는 데이터 형식으로 출력
weekly_rule = rrule(DAILY, dtstart=start_date, until=end_date)
# 데이터프레임에서 특정 날짜기간에 해당하는 데이터만 슬라이싱 하기
# 빈 리스트 생성 후 날짜를 담아주기
a=[]
for date in weekly_rule:
a.append(date.strftime('%Y-%m-%d'))
# df3 에 있는 날짜 데이터는 string
# string -> datetimd -> string 의 형태로 변환
# 위에서 받은 리스트에 해당하는 데이터만 필터링하기 위함
df3['Time stamp2'] = pd.to_datetime(df3['Time stamp']).dt.strftime('%Y-%m-%d')
mask =(df3['Time stamp2'].isin(a))
df3[mask]