国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

pandas中apply和transform方法的性能比較及區別介紹

2020-01-04 14:11:10
字體:
來源:轉載
供稿:網友

1. apply與transform

首先講一下apply() 與transform()的相同點與不同點

相同點:

都能針對dataframe完成特征的計算,并且常常與groupby()方法一起使用。

不同點:

apply()里面可以跟自定義的函數,包括簡單的求和函數以及復雜的特征間的差值函數等(注:apply不能直接使用agg()方法 / transform()中的python內置函數,例如sum、max、min、'count‘等方法)

transform() 里面不能跟自定義的特征交互函數,因為transform是真針對每一元素(即每一列特征操作)進行計算,也就是說在使用 transform() 方法時,需要記得三點:

1、它只能對每一列進行計算,所以在groupby()之后,.transform()之前是要指定要操作的列,這點也與apply有很大的不同。

2、由于是只能對每一列計算,所以方法的通用性相比apply()就局限了很多,例如只能求列的最大/最小/均值/方差/分箱等操作

3、transform還有什么用呢?最簡單的情況是試圖將函數的結果分配回原始的dataframe。也就是說返回的shape是(len(df),1)。注:如果與groupby()方法聯合使用,需要對值進行去重

2. 各方法耗時

分別計算在同樣簡單需求下各組合方法的計算時長

2.1 transform() 方法+自定義函數

pandas,apply,transform,性能比較,區別

2.2 transform() 方法+python內置方法

pandas,apply,transform,性能比較,區別

2.3 apply() 方法+自定義函數

pandas,apply,transform,性能比較,區別

2.4 agg() 方法+自定義函數

pandas,apply,transform,性能比較,區別

2.5 agg() 方法+python內置方法

pandas,apply,transform,性能比較,區別

2.6 結論

agg()+python內置方法的計算速度最快,其次是transform()+python內置方法。而 transform() 方法+自定義函數 的組合方法最慢,需要避免使用!

而下面兩圖中紅框內容可觀察發現:python自帶的stats統計模塊在pandas結構中的計算也非常慢,也需要避免使用!

pandas,apply,transform,性能比較,區別

pandas,apply,transform,性能比較,區別

3. 實例分析

需求:計算每個用戶每天

某種行為消費次數、消費總額、消費均額、消費最大額、消費最小額

在幾個終端支付、最常支付終端號、最常支付終端號的支付次數、最少支付終端號、最少支付終端號的支付次數

某種行為最常消費發生時間段、最常消費發生時間段的消費次數、最少消費發生時間段、最少消費發生時間段的消費次數

某種行為最早消費時間、最晚消費時間

原始數據信息:306626 x 9

pandas,apply,transform,性能比較,區別

具體選擇哪種方法處理,根據實際情況確定,在面對復雜計算時,transform() 與apply()結合使用往往會有意想不到的效果!

需要注意的是,在與apply()一起使用時,transform需要進行去重操作,一般是通過指定一或多個列完成。

此外,匿名函數永遠不是一個很好的辦法,在進行簡單計算時,無論是使用transfrom、agg還是apply,都要盡可能使用自帶方法!!!

4. 小技巧

在使用apply()方法處理大數據級時,可以考慮使用joblib中的多線程/多進程模塊構造相應函數執行計算,以下分別是采用多進程和單進程的耗時時長。

可以看到,在260W的數據集上,多進程比單進程的計算速度可以提升約17%~61%  。

pandas,apply,transform,性能比較,區別

總結

以上所述是小編給大家介紹的pandas中apply和transform方法的性能比較,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網網站的支持!


注:相關教程知識閱讀請移步到python教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 长岛县| 平乡县| 元氏县| 安宁市| 胶南市| 克什克腾旗| 油尖旺区| 舒兰市| 岱山县| 弥勒县| 湖州市| 巧家县| 洮南市| 城步| 深州市| 高密市| 临江市| 西盟| 南川市| 佛山市| 揭西县| 巴东县| 霍林郭勒市| 珠海市| 贺兰县| 台湾省| 三门县| 高要市| 海晏县| 德兴市| 红河县| 罗山县| 阳春市| 海丰县| 泰宁县| 辉南县| 姚安县| 南涧| 普格县| 伊宁县| 赤壁市|