文章主要聊聊在Python中資料的排序與分組彙總
首先我們開啟上次寫好的 Notebook 檔案,點選Cell -> Run all 命令將程式碼重新執行一次,把所需的軟體包及寫好的自定義函式執行裝入到記憶體中,然後繼續進行操作。
按照索引進行排序:df。sort_index(ascending=True|False)
如圖所示,索引為資料集(DataFrame)最左側的列,預設情況下為該行行號並升序排序。以下示例將資料集按照索引降序排列:df。sort_index(ascending=False)
注:因為這裡索引為行編號,因此重新排序沒有太大的必要,但可能在有些場合可能會用到這個功能,比如索引列為時間,則可以按照索引列進行時間先後排列。
按照資料列進行排序:df。sort_values(“列名”, ascending=True|False)
以下程式碼將兩市股票按照市值從大到小排列
以下程式碼截取出市值最大的10只個股
資料的分組及聚合運算groupby與agg
上面我們已經學會如何對資料進行排序,快些獲取處於市場前列的的個股資料,但如果我們需要按照行業進行分組統計應該怎麼辦呢,這就涉及到分組與統計功能了。資料集分組與統計功能簡單用法如下df。groupby(“列名”)。agg(“聚合函式”),可靠的聚合函式如下:
統計數量:count
求和:sum
求平均值:mean
求中位數、最大值、最小值: median, max, min
以下程式碼求取所有行業總市值
注意:如果使用內建函式統計的話,直接使用df。groupby(“行業”)。sum()也是可以的。
以下程式碼統計兩市所有行業可統計列中位數
注意,可以同時進行多項統計。比如:我們可以同時統計最大值與最小值。
大家可以看到,此時輸出就有些亂了,因此建議只統計希望統計的列,以下程式碼只按照行業統計市盈率最大值,最小值,中位數
注:df[[“行業”,”滾動市盈”]] 這個操作選取出用於分組的列
行業
以及用於統計的列
滾動市盈率
然後再對返回的資料集進行分組與統計即可。
自定義統計
除了根據預設聚合函式外,還可以自行編制聚合函式,比如:我們可以按照行業統計市值大於100億的股票數量
# 自定義統計函式# 注意:該函式傳的是分好組的資料,需要返回一個數據,這也就是稱之為聚合函式的意義所在def count100plus(arr): c = 0 try: for x in arr: if x > 1。0e+10 : c = c + 1 except: passreturn c#注意下面agg函式引數,呼叫自定義函式是沒有引號存在的。df[[‘行業’,‘總市值’]]。groupby(“行業”)。agg(count100plus)
總結
我們簡單瞭解瞭如果針對資料進行分組與排序,透過分組與排序,我們對兩市資料進行簡單的統計與彙總,下一篇我們聊聊資料集的聯接與列運算,週末愉快。
該文涉及到的Notebook檔案見評論區。