繁体   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