1 Concat
pd.concat([df1, df2, df3]): 2개 이상의 pandas 객체(일반적으로 데이터프레임)을 연결(concatenate).
- pd.concat([df1, df2, df3], axis=1)행 또는 열 방향으로 결합 가능. axis=0이 행 방향으로 연결(default), axis=1이 열 방향으로 연결.
전달받은 걸 따로 맞추는 작업 없이 그냥 순서대로 연결.
ex1) 예를 들면, df1, 2, 3이 각각 0~3까지 index가 있고, 열 이름이 A~D로 일치한다.
aixs=0으로 행 방향으로 붙이면, 열 이름 같은 것끼리 같이 붙인다. 행 인덱스는 0~3, 0~3, 0~3으로 index가 붙어서 총 12행이 된다.

axis=1으로 열 방향으로 붙이면, 행 인덱스 일치하는 거 기준으로 그냥 붙인다. 열 이름은 A~D, A~D, A~D로 총 12열이 된다. (인덱스 숫자 같아보여도 .index해서 보면 다른 경우 있다)

pd.concat([df1, series]): df에 시리즈를 붙이면 그냥 새로운 열로 추가. 만약 이걸 같은 열 이름으로 맞추고 싶으면 Dataframe으로 바꿔서 붙이면 됨.
ex2) 그냥 시리즈로 붙인 결과 vs 데이터프레임으로 바꿔서 붙인 결과


pd.concat([df1, df2, df3], ignore_index=True): ignore_index = True로 하면, 기존 index 무시하고 아예 새 index 할당. axis=1로 하면 열 이름 다 없애고 할당.
pd.concat([df1, df2, df3], join='inner'): 그냥 하면, 데이터프레임이 겹치지 않는 부분은 누락값으로 처리. 여기서 inner join으로 설정하면, 공통 열이 없으면 아예 빠짐.
iner join, outer join 개념(oracle sql)
여기선 셋 다 컬럼 이름이 겹치지 않으면 그냥 아무 열도 생기지 않음. 3개를 concat할 때 2개만 겹쳐도 안됨.



2 merge
o2o_merge = site.merge(visited_subset, left_on = 'name', right_on = 'site', how=)
o2o_merge
- 기본적으로 inner join을 실행한다. merge를 붙이는 데이터프레임을 왼쪽으로 지정(여기선 site). 첫번째 인자에 붙일 데이터프레임을 지정.
- left_on, right_on으로 붙일 열 이름을 지정. 둘 다 이름이 같으면 그냥 on도 가능.
- 그 열에서 값이 일치하는 행끼리 합친다.
- how=inner, outer, left(왼쪽 데이터 프레임에 있는 모든 행 결과 포함, 오른쪽과 일치하지 않으면 NaN 값), right으로 결합 방식 설정.
2-1 다대다 병합
ps = person.merge(survey, left_on = 'ident', right_on = 'person')
vs = visited.merge(survey, left_on = 'ident', right_on = 'taken')
ps_vs = ps.merge(vs, left_on=['quant'], right_on = ['quant'])
- 여기서 ps의 quant 값을 count하면 rad 8, sal 8, temp 3개로 총 19개행.
vs의 quant 값을 count하면 rad 9, sal 8, temp 4개로 총 21개 행.
- 이 2개를 merge하면, rad끼리 모두 결합 89 = 72
sal끼리 88 = 64, temp 3*4 = 12.
이렇게 같은 경우끼리 모두 결합되서 총 72 + 64 + 12로 148개 행이 나온다
2-2 조건이 많은 경우
ps = person.merge(survey, left_on = 'ident', right_on = 'person')
vs = visited.merge(survey, left_on = 'ident', right_on = 'taken')
ps_vs2 = ps.merge(vs, left_on=['ident', 'taken', 'quant', 'reading'],
right_on=['person', 'ident', 'quant', 'reading'])
- 이 경우 조건이 순서대로 모두 일치할 때만 결과가 나오고, 나머지는 모두 없어진다.
3 assert문
- 코드가 의도한 대로 실행됐는지 확인. 조건이 True면 반환 없이 다음 코드 실행. 코드가 False면 AssertionError 발생 후 코드 멈춤.
ex) assert 5 == 6 => 에러 뜬다