[英]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.