【Pandas】全網最好懂的df多層級索引、多層索引教學:df的MultiIndex教學(建立、插入、索引)
一、前言
在有時候單一Index或單一columns看不清楚,何不把它合併再一起一同操作!
雖然我這人建議,還不熟悉MultiIndex用起來可能會有點辛苦,單順手之後,蠻舒服的!
再配合excel控制就可以做出各式各樣的報告跟報表還有模板!
廢話不多說,讓我們教學看下去!
二、MultiIndex教學
其實基本的觀念蠻簡單的,就是你的index跟col可以是一個tuple也就是()的部分。
然後使用pandas.MultiIndex.from_product把多層的index或col建立出來之後再建立df就可操作了。
pandas.MultiIndex.from_product出來的multiindex可以當作index使用或col使用,不要想得太死!
繼續往下看詳細解說。
完整程式碼
import pandas, numpy import matplotlib.pyplot as plt import datetime import twstock def get_stock(symbol): # 取得證交所股票data stock = twstock.Stock(symbol) symbol = stock.sid # 回傳股票代號 date = stock.date # 時間 open = stock.open # 開 high = stock.high # 高 low = stock.low # 低 close = stock.price # 收 # 轉成DataFrame data = {'Open': open, 'High': high, 'Low': low, 'Close': close} df = pandas.DataFrame(data, index=date) return df symbol1 = '2330' symbol2 = '2454' df1 = get_stock(symbol1).iloc[5:] df2 = get_stock(symbol2).iloc[8:] df2 = df2.iloc[10:] multi = [[symbol1, symbol2], ['Open', 'High', 'Low', 'Close']] # 第一層[symbol1, symbol2] # 第二層 ['Open', 'High', 'Low', 'Close'] mindex = pandas.MultiIndex.from_product(multi, names=['stock', 'price']) # 給予name 第一層stock 第二層price # 建立多層df df_multi = pandas.DataFrame(columns=mindex, index=df1.index) # 多層次標籤可以放在col 也可以放在index #df_multi = pandas.DataFrame(columns=df1.index, index=mindex) # 放入資料 df_multi[symbol1] = df1 # 等同於join方式 當天資料有缺或多比照join方式處理給予nan或是省略 df_multi[symbol2] = df2 # 查詢(索引) df_multi[symbol1] # 查詢股票1全部 df_multi[(symbol1, 'Close')] # 查詢股票1的Close df_multi.xs(df1.index[-1]) # 交叉索引 查詢symbol1及2的最後一天資料 df_multi.loc[df1.index[-1]] # 同上
multi = [[symbol1, symbol2], ['Open', 'High', 'Low', 'Close']] 初步建立你的multiindex的架構
mindex = pandas.MultiIndex.from_product(multi, names=['stock', 'price']) 給予你的multiindex名稱並且建立
這邊[symbol1, symbol2]對應stock, ['Open', 'High', 'Low', 'Close']對應price,其實names不太重要。
df_multi = pandas.DataFrame(columns=mindex, index=df1.index)接下來就可以建立df了,看你的multiindex要當index或col都可以
一開始有資料可以直接給產生df,如果後面補資料可以直接用df_multi[symbol1] = df1這樣方法等同於join
查詢的話基本款用df_multi[(symbol1, 'Close')] ,其他可以看上面參考
三、後記
大家pandas是一個非常好用的套件,但卻有很多眉眉角角,也是資料分析的好夥伴,大家還有遇上什麼問題可以留言給我唷!
其他更多pandas教學:https://pixnashpython.pixnet.net/blog/category/461784