簡體   English   中英

熊貓groupby對象唯一計數性能

[英]Pandas groupby object unique count performance

我有一個很大的交易數據集,看起來像:

| cust_no | acct_no | trans_id | product_id | ..... |

我嘗試幾種方法來計算每個客戶有多少個唯一帳戶,以及客戶購買了多少個唯一產品等。

  • 方法1.a

transaction_df[['cust_no','acct_no']].groupby('cust_no')['acct_no'].nunique()

平均運行91.5毫秒

  • 方法1.b

transaction_df.groupby('cust_no')['acct_no'].nunique()

平均運行85.5毫秒

  • 方法2.a

transaction_df[['cust_no','acct_no']].groupby(['cust_no','acct_no']).size().groupby('cust_no').size()

運行61.5ms

  • 方法2.a

transaction_df.groupby(['cust_no','acct_no']).size().groupby('cust_no').size()

運行55.3ms

我有兩個問題:

  1. 切片后的DataFrame為什么運行得較慢,即transaction_df[['cust_no','acct_no']]比僅transaction_df慢?

  2. 為什么.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM