[英]Pandas groupby object unique count performance
我有一個很大的交易數據集,看起來像:
| cust_no | acct_no | trans_id | product_id | ..... |
我嘗試幾種方法來計算每個客戶有多少個唯一帳戶,以及客戶購買了多少個唯一產品等。
transaction_df[['cust_no','acct_no']].groupby('cust_no')['acct_no'].nunique()
平均運行91.5毫秒
transaction_df.groupby('cust_no')['acct_no'].nunique()
平均運行85.5毫秒
transaction_df[['cust_no','acct_no']].groupby(['cust_no','acct_no']).size().groupby('cust_no').size()
運行61.5ms
transaction_df.groupby(['cust_no','acct_no']).size().groupby('cust_no').size()
運行55.3ms
我有兩個問題:
切片后的DataFrame為什么運行得較慢,即transaction_df[['cust_no','acct_no']]
比僅transaction_df
慢?
為什么.nunique()
方法比僅堆疊兩個groupby
慢得多?
1)切片需要根據操作分配內存和/或對象的副本。 在這里,您開始操作之前先創建一個新的DataFrame。
2) nunique
將為O實現一個邏輯,或者直接調用set
,它在O(N)時間運行。 size
將運行O(1)
在此處進行實驗時,了解有關數據集的先前結構信息可以幫助您優化功能選擇。 如果您有興趣, 請閱讀https://en.wikipedia.org/wiki/Time_complexity
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.