Table of Contents:
- 資料分組: groupby/aggregate/apply
- group屬性與方法: str.count/groups/size/get_group
- 高效率運算函式: pd.eval/df.query
資料分組
先建立一個NBA球員的DataFrame
1 | demo = pd.DataFrame({'球隊':['湖人','勇士','湖人','勇士(富邦)'],'球員':['Kobe','Curry','Lebron','林書緯'],'薪資':[1000,900,800,200]}) |
groupby()
計算球隊總薪資
1 | demo.groupby(['球隊']).sum() |
也可以用多個名稱來分組
1 | demo.groupby(['球隊','球員']).sum() |
aggregate()
一次計算sum(),min(),max()…
1 | demo.groupby(['球隊'])['薪資'].aggregate(['sum','max','min']) |
apply()
呼叫lambda函式或是一般函式來運算
1 | demo.groupby(['球隊']).apply(lambda x: x['薪資']>500) |
1 | demo[demo['薪資'].apply(lambda x: x>500)] |
str.count()
DataFrame[某欄位].str.count(關鍵字)
計算某欄位出現給定的關鍵字的數量
1 | demo['球隊'].str.count('人') |
group.size()
看分組後的資料大小(多寡)
1 | group = demo.groupby('球隊') |
group.groups
看分組後的組別
1 | group = demo.groupby('球隊') |
group.get_group()
取得分組後的某組別資料
1 | group = demo.groupby('球隊') |
Pandas高效率運算函式
pd.eval()
功能強大,將字符串str當成有效的表達式來求值並返回計算結果
常用來設定config檔的參數
建立三個df並計算加總,比較有無eval的效率差異
1 | df1,df2,df3 = (pd.DataFrame(np.random.randint(0,10,(4,2))) for i in range(3)) |
df.query()
功能強大,用來查詢符合條件的資料
建立df並查詢條件,比較有無query的效率差異
1 | df = pd.DataFrame(np.random.randint(0,10,(4,2)), columns=['A','B']) |