df.melt() pd.melt(df): 데이터프레임 재구조화하는 함수. 가로로 긴 데이터를 세로로 긴 데이터로 변환한다.
id_vars: 유지할 열 이름. 재구조화해도 이건 열로 그대로 남아있다. 여러 개면 리스트로 전달. value_vars: 긴 형식으로 변환될 열 지정. var_name: 긴 형식으로 변환되는 열의 이름. 기본값은 variable.value_name: 긴 형식으로 변환되는 값열의 이름. 기본값은 value. col_level: 컬럼명이 멀티 인덱스일 때, 변수이름이 저장되어 있는 레벨 지정. pew_long = pew.melt(id_vars='religion') => var_name, value_name 지정 안한 경우.

예시) 4개의 열을 고정, 나머지는 week, rating이라는 열로 바꾸기
billboard_long = billboard.melt(
id_vars=['year','artist', 'track', 'time','date.entered'],
var_name = 'week',
value_name = 'rating')
ebola_long = ebola.melt(id_vars=['Date', 'Day'])
variable_split = ebola_long.variable.str.split('_')
#분할한 문자열 리스트의 각 값에 접근하려면 get() 메서드를 사용
#인덱스 번호로 접근해도 됨
status_values = variable_split.str.get(0)
country_values = variable_split.str.get(1)
ebola_long['status'] = status_values
ebola_long['country'] = country_values


ebola_long = ebola.melt(id_vars=['Date', 'Day'])
variable_split = ebola_long.variable.str.split('_', expand=True)
ebola_long[['status', 'country']] = variable_split
weather_melt = weather.melt(
id_vars=['id', 'year', 'month', 'element'],
var_name='day',
value_name='temperature')


weather_tidy = weather_melt.pivot_table(
index=['id', 'year', 'month', 'day'],
columns='element',
values='temperature')

weather_tidy_flat = weather_tidy.reset_index()

참고로 메서드 체인 이용해서 여러 메서드 한거번에 적용하기. 여기서는 pivot_table과 reset_index() 한거번에
#메서드 체인을 이용하면 element 피벗 단계를 한 번에 수행 가능
#=> 에러. 줄 바뀌는 지점에서 .reset_index()라서
weather_tidy = weather_melt.pivot_table(
index=['id', 'year', 'month', 'day'],
columns='element',
values='temperature')
.reset_index()
#가시성 안좋지만 이렇게 해도 됨
weather_tidy = weather_melt.pivot_table(
index=['id', 'year', 'month', 'day'],
columns='element',
values='temperature').reset_index()
# 줄 바뀌는 지점 조심. 귀찮으면 그냥 묶어라
weather_tidy = (
weather_melt.pivot_table(
index=['id', 'year', 'month', 'day'],
columns='element',
values='temperature')
.reset_index()
)
pd.pivot_table(df), df.pivot_table()df: 요약하려는 데이터프레임values=: 집계하려는(즉, 바뀌지 않고 기준이 되는) 열 이름(리스트)index=: 행 인덱스로 사용할 열 이름(리스트)columns=: 열 인덱스로 사용할 열 이름(리스트)aggfunc=: 값을 집계하는 방법 지정. 기본은 meanfill_value=: 결측값을 채울 값margins=: 총계 행 및 열을 추가할지 여부를 나타내는 boolean. import glob
# glob는 저 이름에 해당하는 파일들을 들고오는 것
nyc_taxi_data = glob.glob('../data/fhv_*')
list_taxi_df = []
for csv_filename in nyc_taxi_data:
df = pd.read_csv(csv_filename)
list_taxi_df.append(df)
taxi_loop_concat = pd.concat(list_taxi_df)