
0. 오늘은 파이썬 관련해서 내용을 정리해보려고 한다.
꼭 TIL 을 하나만 적으라는 법은 없으니까! 일단은 라이브 강의를 다시 복습하면서 파이썬에 대해서 정리하려고 한다.
강의가 끝나면 프로그래머스 해설도 천천히 해봐야지.. 코드를 뜯어보는게 중요하다고 생각하니까.
1. Merge 와 Join
Merge 는 SQL의 Join과 동일한 역할을 하고 있다. 단, 차이점이 있으며 파라미터(주요 옵션)도 다르다. 일단은 Merge 와 Join을 표로 정리해서 이를 구분해보려고 한다.
**Parameter
1. on = SQL 과 동일하게 작동한다.
2. how = 어떤 JOIN 방식을 사용할 것인지
3. left on / right on
MERGE | JOIN | |
결합기준 | 칼럼을 기준으로 두 데이터 프레임을 결합 (유연성이 높다.) |
인덱스를 기준으로 두 데이터 프레임을 결합 |
응용 | 결합의 기준이 되는 칼럼을 지정 | 결합의 기준이 되는 칼럼을 지정할 수도 있고, 인덱스를 기준으로 결합할 수도 있음 |
사용법 | Pandas 라이브러리의 함수 중 하나, 두 데이터 프레임을 input 으로 받는다. (수평 결합) |
결합의 기준이 되는 칼럼을 지정할 수 있으며, 인덱스를 기준으로 결합할 수 있음 (수직결합) |
파라미터 (주요 옵션) |
on : 조건의 칼럼의 갯수 (단일 혹은 복수) how : 어떤 조인 방식을 사용할 것인지 (inner, outer, left, right) left on / right on : 열기준 병합시 기준으로 할 열의 양측 이름이 다를때, 지정하는 옵션 sort : 병합 후 인덱스 정렬 여부 (True / False) suffixes : 중복된 칼럼 이름의 처리 indicator: True 로 할 경우, 마지막 열에 병합 정보를 출력 |
how : 어떤 조인 방식을 사용하는지 (inner, outer, left, right) Isuffix / rsuffix : 이름이 같은 칼럼이 있을 경우, 문자열을 지정해 부여 sort : 인덱스 정렬 여부 |
차이점 | 수평결합 칼럼을 2개 이상 받음 EX) merge_df = pd.merge(df2,df3) |
수직 결합 칼럼을 1개로 받음 EX) df2.join(df3) |
Merge 와 Join 문법 정리
1) Merge
df2['Customer ID']=df3['user id']
merge_df= pd.merge(df2,df3)
데이터 프레임 합치기 = 판다스 라이브러리를 사용해 df2,df3을 합친다
#동일 기능
merge_df = pd.merge(df2,df3, how='inner', on='Customer ID')
#공통 칼럼 2개 이상
merge_df = pd.merge(df2,df3, how='inner/left/right/outer(조인 방식)',on=['공통칼럼1','공통칼럼2']
##기준열 이름이 다를 때
merge_df = pd.merge(df2,df3,how='inner',left_on='왼쪽 기준열',right_on='오른쪽 기준열')
##공통칼럼을 개별로 출력하고 싶을 때
merge_df = pd.merge(df2,df3,how='inner',on='Customer ID', suffixes=('_left','_right'))
➡️ 해당 방식으로 출력하면 아이디 1, 아이디 2 순으로 나온다.
2) Join
#단순한 Join
df2.join(df3) ➡️ 1개의 df를 사용함
#join 방식 설정
df2.join(df3,how='right')
#join시 이름이 같은 칼럼이 있을 경우, 옵션을 설정해서 조인 가능
df.join(df,how='left',lsuffix='1', rsuffix-'2')
➡️suffixes 는 인수를 튜플로 두값을 한꺼번에 입력한다.
➡️객체들간 이름이 중복되는 열이 있다면, 해당 열에 붙일 접미사를 정한다.
#join 이후, 인덱스 정렬하기
df.join(df,how='left',lsuffix='1', rsuffix-'2', sort=True)
TIP) sort() sorted()는 차이가 난다.
sort() | 1. 기존의 리스트를 병렬한다. 2. 리스트 내에서만 정의될 수 있다. |
sorted() | 1. 새로운 정렬된 리스트를 만든다. |
2. concat 과 append
Concat | Append | |
결합기준 | 수직, 수평결합 모두 가능 | 수직결합만 가능 해당 함수는 없어질 가능성이 존재함 |
개념 | 여러 데이터 프레임 또는 시리즈를 특정 축을 따라서 연결하는 데 사용한다. | 데이터 프레임에 '행'(수직 결합)을 추가하는 메서드 두 데이터 프레임을 행 기준으로 결합 |
주요 옵션 | axis : 수직 결합 / 수평 결합의 여부 (axis=0: 수직결합(기본값),axis=1: 수평결합) join : 어떤 방식의 조인을 사용할 것인지 결정 (inner, outer, left, right) keys: 데이터 프레임 축이름 지정 ignore_index=True: 인덱스 재배열 |
sort: 열을 사전적으로 정렬할 지 여부 단순 결합과 없는건 NAN 처리를 한다. 넣은 데이터 프레임이 제시한 데이터 프레임 밑으로 들어간다. |
1) Concat
##기본 작성 방법
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')
2) append
##기본 작성 방법
df.append(df2)
3. 피벗 테이블
피벗테이블의 정의 : 데이터의 열을 기준으로 피벗테이블로 변환시키는 함수
주요 옵션 'index','columns','values'
columns : 열로 시용될 열 | |
index : 축으로 사용될 열 | values : 값으로 사용될 열 |
index 및 columns 를 리스트 형태로 입력한 경우, 멀티 인덱스 기반 피벗테이블이 형성
value 에 리스트를 입력할 경우 각 값에 대한 테이블이 연속적으로 생성된다.
(--> 이건 이해가 안가서 다음 페이지에서 참조함)
index1 | index2 | columns |
10대 | 남성 | values |
10대 | 여성 | |
20대 | 남성 |
09-09. 피벗변환 (pivot)
####DataFrame.pivot(index=None, columns=None, values=None) ##개요 `pivot`메서드는 데이터의 열을 기준으로 피벗테이블로 변환시…
wikidocs.net
1). 기본 생성
df.pivot_table(index='Machine', columns='Country',values='Price)
>>
Country china Japan Korea
Machine
PC 1 1 1
TV 3 5 8
2) Values 의 값을 리스트로 넣기
만약에 values 에 따로 입력하지 않으면 남은 모든 열들이 values 에 입력되어 연속으로 출력된다.
df.pivot_table(index='Machine',columns='Country',values=['Price','Brand'])
>>
price brand
country | china japan korea | china japan korea
Machine
PC 1 1 1 | C G P
TV 3 5 8 | 가 나 다
이 상태에서 [열 이름] 형태를 붙여서 원하는 values 만 출력할 수 있다.
df.pivot_table(index='Machine',columns='Country')['Brand']
>>
brand
country | china japan korea
Machine
PC C G P
TV 가 나 다
3) aggfunc : 어떤 계산을 할 지
집계 함수 | 코드 및 기능 |
합계 | aggfunc = 'sum' |
평균 | aggfunc = 'mean' |
표준 편차 | aggfunc = 'std' |
갯수 | aggfunc = 'count' |
갯수 (중복 제거) | aggfunc = 'nunique' |
최대값 | aggfunc = 'max' |
최소값 | aggfunc = 'min' |
fill_value (결측치 처리) | NaN(결측치) 값을 처리하고 싶을 때 사용, fill_value=0 이 가장 많이 사용된다. EX) df.fill_value(df) |
dropna (결측치 삭제) | 결측치(na) 삭제 여부 결정 EX) df.dropna(df) |
sort (정렬) | index or columns 기준으로 정렬 EX) sort_index(ascending = True(or False) df = df.sort_values(ascending=True(오름차순)(or False(내림차순)) |
3. QCC 테스트 3번 정리
SELECT
CityName AS city_name,
CountryName AS country_name,
Continent AS continent_name,
Population AS population
FROM (
SELECT
c.Name AS CityName,
co.Name AS CountryName,
co.Continent,
c.Population,
ROW_NUMBER() OVER (PARTITION BY co.Continent ORDER BY c.Population DESC) AS PopulationRank
FROM qcc.country co
JOIN qcc.city c ON c.CountryCode = co.Code
) ranked_cities
WHERE
PopulationRank = 1
ORDER BY
Population DESC
일단인 지난번 QCC 가 이렇다고 했는데, 내가 쓴 답은 아마 지난번에 있을 것이다.
[𝟐𝟓.𝟎𝟑.𝟏𝟒] 𝐓𝐈𝐋 𝐍𝐎𝐓𝐄 𝟏𝟖
0. 개요오늘 QCC 테스트를 보고 이번에 피드백 받은거랑 다른 함수를 사용해서 다른 문제 풀이를 해보려고 한다.1. QCC 테스트1번 문제는 확인해보자면 ➡️ 전년에 비해서 올해 GNP가 낮은 국가들
bom-rosy.tistory.com
일단 3개 중에서 2개를 맞았으니 그거로라도 위안을 삼으려고 한다. 처음에는 다 틀려서 0 이었는데, 그래도 2개 맞은거면 힘낸거니까...
SELECT B.name AS CITY_NAME, A.Name AS COUNTRY_NAME,A.continent,Max(C.population) AS Population
FROM country A INNER JOIN city B ON A.code = B.countrycode
INNER JOIN (SELECT name,countrycode, Max(population) as Population FROM city GROUP BY Population) AS C ON A.code = C.countrycode
WHERE B.name is not null
GROUP BY A.continent
ORDER BY Population desc
SELECT B.name AS CITY_NAME, A.Name AS COUNTRY_NAME,A.continent,Max(C.population) AS Population
FROM country A INNER JOIN city B ON A.code = B.countrycode
INNER JOIN (SELECT continent, Max(population) as Population FROM city GROUP BY continent) AS C ON A.continent = C.continent
WHERE B.name is not null
GROUP BY A.continent
ORDER BY Population desc
분~명히 이렇게 하시라고 하셨는데... 안맞아서 이거 다시 써야 할 거 같다.

뭄바이가 나와야하는데... 안나왔어요.. 그리고 결론적으로 풀이 도와주신건 감사하긴 한데, 그... city 에서 일부러 MAX를 구한건데 의도를 잘못 이해하셨을 수도 있겠다 싶었다. 근데 대놓고 이건 틀린거에요 할 수도 없을 수...도 있으니까 그러려니 하려고 한다.
계속 도전은 하고 있는데 잘 안되서 내일 마저 해야지...
요새 잘하고 있는지 좀 불안하다. 다른 분들은 알고리즘도 달하고 그러는데, 나는 뭔가 진전도 없고...
거기에 따라가려고 수업도 제깍 듣는데 잘 모르겠어서 다시 한번 듣는다. 이번에도 lambda 함수랑 도 다 연습도 해봤는데.
튜터님이 말씀하신 대로 막... 이것저것 하는데, 왜 안될까? 너무 속상했다.
일단은 계속 손으로 써봐가면서 계속 익혀야겠다.
'𝐓𝐈𝐋 (𝐅𝐨𝐫 𝐂𝐚𝐦𝐩) > 𝐂𝐎𝐃𝐈𝐍𝐆 (𝐒𝐐𝐋, 𝐏𝐘𝐓𝐇𝐎𝐍)' 카테고리의 다른 글
[𝟐𝟓.𝟎𝟑.𝟏𝟗] 𝐓𝐈𝐋 𝐍𝐎𝐓𝐄 𝟐𝟏 (0) | 2025.03.19 |
---|---|
[𝟐𝟓.𝟎𝟑.𝟏𝟖] 𝐓𝐈𝐋 𝐍𝐎𝐓𝐄 𝟐𝟎 (0) | 2025.03.18 |
[𝟐𝟓.𝟎𝟑.𝟏𝟒] 𝐓𝐈𝐋 𝐍𝐎𝐓𝐄 𝟏𝟖 (0) | 2025.03.14 |
[𝟐𝟓.𝟎𝟑.𝟏𝟑] 𝐓𝐈𝐋 𝐍𝐎𝐓𝐄 𝟏𝟕 (0) | 2025.03.13 |
[𝟐𝟓.𝟎𝟑.𝟏𝟐] 𝐓𝐈𝐋 𝐍𝐎𝐓𝐄 𝟏𝟔 (0) | 2025.03.12 |