반응형

# 데이터프레임 변형하기
# 그룹화 하기
airline_group = flight.groupby('airline')

 

airline_group.groups            # 그룹화 된 것 확인
airline_group.count()           # 데이터 갯수 확인
airline_group.size()            # 집단별 크기
airline_group.sum()             # 숫자데이터 합계
airline_group.mean()            # min, max, mean, std, var(분산),  가능

airline_group.mean()[['price']]   # 특정 컬럼을 지정해서 숫자 계산하기

 

# 복수의 컬럼을 기준으로 groupby 해서 다중 인덱싱 설정하기
flight.groupby(['airline','arrival_time']).min()

 

# 여러개의 컬럼을 groupby 하여 새로운 데이터프레임 생성하기
mul_airline_group=flight.groupby(['airline','arrival_time'])
mul_airline_group.mean()

 

# loc 을 이용하여 원하는 인덱스의 데이터만 가져오기
mul_airline_group.mean().loc[[('AirAsia','Evening')]]

 

# 인덱스로 그룹화 하기
## set_index로 인덱스 설정하기
indexed_flight = flight.set_index(['airline','arrival_time']) # 그룹화 된 것은 아님
indexed_flight

 

flight.set_index(['airline','arrival_time']).groupby(level=[0]).mean()   # 첫번째 인덱스로 그룹화 한 것
flight.set_index(['airline','arrival_time']).groupby(level=[0,1]).mean()   # 두 개의 인덱스 모두로 그룹화 한 것

flight.set_index(['airline','arrival_time']).groupby(level=[0,1]).aggregate([np.mean, np.max]) # aggregate로 집계하기

 

# 피벗테이블 생성하기

# pivot_table과 pivot 명령은 동일한 동작을 하는데, pivot은 중복값이 있을 때 오류남

flight.pivot_table(index = 'source_city', columns = 'destination_city', values = 'price')

 

 

# concat으로 병합하기

#  ignore_index 옵션, True : 기존 인덱스 무시하고 0부터 새로 인덱스 지정

# False : 기존 인덱스 값을 그대로 붙임

pd.concat([df1, df2], ignore_index=True)

 

# axis 옵션, 기본은 axis = 0, 행레벨로 병합(위아래로 붙이기), 옵션 안쓰면 기본

# axis = 1로 지정하면 열레벨로 병합됨(옆으로 붙이기), 이때 두 데이터프레임의 인덱스 맞춰서 병합되고, 데이터가 없는 인덱스는 NaN으로 합쳐짐

pd.concat([df1, df2], axis = 1)

 

# join 옵션 outer(합집합), inner(교집합)

# outer로 하면 한쪽만 있는 것도 합치고

# inner로 하면 양쪽에 다 있는 컬럼만 합침(한쪽만 있는 컬럼은 버림)

pd.concat([df1, df2], join='inner')

 

# verify_integrity 옵션 : 두 데이터프레임에 중복인 인덱스가 있는지 검사하고 메시지 주는 옵션

# true로 하면 인덱스가 중복인 경우 오류메시지 발생

pd.concat([df1, df2], verify_integrity=True)

 

# Merge/Join으로 데이터 병합하기 - 특정한 key를 기준으로 데이터를 병합할 수 있음

## (defualt) inner : 일치하는 값이 있는 경우만 데이터를 가져옴

##  left : 왼쪽 데이터프레임을 기준으로 오른쪽 데이터프레임을 병합(오른쪽 df 에 값이 없으면 NaN)

## right : 오른쪽 df 기준으로 왼쪽 df를 병합

## outer : left와 right를 합한 df를 병합

pd.merge(df1, df2, on='customer_id')   # customer_id가 일치하는 경우만 병합

pd.merge(df1, df2, on='customer_id', how='inner')    # 위와 동일함(기본이 inner)

pd.merge(df1, df2, on='customer_id', how='left')

# df1을 기준으로 df2를 합치는 것, df1에는 있는데 df2에 없으면 NaN, df2에는 있는데, df1에 없으면 병합된 df에 포함시키지 않음

pd.merge(df, df2, on='customer)id', how='right')

+ Recent posts