728x90

❤️ 배운 것

pandas

 - query

 - isin

 - reset_index

 - apply

 - groupby

 - merge

 - pivot table

 - datetime

 

코드 모음

AAPL.query("Volume <= 70000000")
AAPL.query('Open > Close')


AAPL['Volume'].isin([302220800, 260022000])
AAPL.query("Volume in [302220800, 260022000]")

Volume = 117467900
AAPL.query('Volume == @Volume')

AAPL.reset_index(drop=True)


df_kospi['방법1'] = df_kospi['ChagesRatio'].apply(check_changes)
df_kospi['방법2'] = df_kospi['ChagesRatio'].apply(lambda x : '오른주식' if x>0 else '내린주식')
df_kospi['방법3'] = np.where(df_kospi['ChagesRatio'] >0, '오른주식','내린주식')


merge4.isnull().sum()
df_kospi['방법1'].value_counts()
df_krx['Market'].unique()
df_krx[['Market','ChagesRatio']].groupby('Market').mean()
df_krx[['Market','ChagesRatio', 'Stocks']].groupby('Market').agg({'ChagesRatio' : 'max', 'Stocks' : 'min'})
df_krx[['Market','ChagesRatio', 'Stocks']].groupby('Market').agg({'ChagesRatio' : ['max', 'sum'], 'Stocks' : ['min', 'mean']})


merge2 = pd.merge(left = market_price_change, right = purchases_of_equities, on = ['티커', '종목명'], how = 'left')


# 칼럼이름이 서로 다를 때
purchases_of_equities2 = purchases_of_equities.rename(
    columns = {"티커" : "이름변경_티커", '종목명' : '이름변경_종목명'})

pd.merge(left = market_price_change, right = purchases_of_equities2,
         left_on = ['티커', '종목명'], right_on = ['이름변경_티커', '이름변경_종목명'], how = 'inner')


df[['Date', 'Symbol','Close']].groupby(['Date', 'Symbol']).mean()

pd.pivot_table(data = df, index = ['Date', 'Symbol'], values = 'Close', aggfunc = 'mean')


date1 = datetime(2023, 9, 12)
date3 = '2023-09-12' # '2023/09/12', '20230912'
datetime_date3 = pd.to_datetime(date3)
datetime_date3.strftime('%Y%m')

 

💕 과제

# 1. df_krx의 Marcap(시가총액)를 활용하여 시가총액 순위를 새로운 칼럼으로 정의 (칼럼명 : Marcap_rank)
# Marcap(시가총액)이 높을수록 낮은순위(1등에 가깝다.)
df_krx["Marcap_rank"] = df_krx["Marcap"].rank(ascending=False)

# 순위데이터(Marcap_rank)를 활용하여 100위 이하는 large-cap, 100~300위는 mid-cap, 이외 순위는 small-cap으로 새로운 칼럼 선언(칼럼명 : Marcap_size)
df_krx['Marcap_size'] = df_krx['Marcap_rank'].apply(lambda x: "large-cap" if x <= 100 else ("mid-cap" if x <= 300 else "small-cap"))

# 3. Marcap_size(large-cap, mid-cap,small-cap) 수익률(ChagesRatio)의 평균을 출력
df_krx[['Marcap_size', 'ChagesRatio']].groupby(by="Marcap_size").mean()

 

💛 배운점/느낀점

- pandas는 그동안은 검색해서 되는대로 코드를 작성하다보니 성능을 신경쓰지 못했는데, 집계나 pivot 등을 어느정도 머리에 외워두면 논리적이고 속도상 개선할 부분을 생각하며 할 수 있을 것 같다.

- 라인디버깅이 불편하다는 단점이 있지만 lambda나 one liner에 익숙해지고있어서 필요한 부분에 사용하려고 한다.

반응형