SQL查询做熊猫分解。一组之后的累积总和?

时间:2019-04-13 17:01:57

标签: mysql pandas

我有这个数据框:基本上每一行都是一天由一位客户执行的交易。 同一位客户在同一天和不同日期进行了多次交易。我想获得一列以前访问的客户数。

id  date   purchase 

id1 date1  $10    

id1 date1  $50    

id1 date2  $30     

id2 date1  $10     

id2 date1  $10     

id3 date3  $10     

添加访问次数列后:

id  date   purchase  visit

id1 date1  $10         0 

id1 date1  $50         0

id1 date2  $30         1

id2 date1  $10         0

id2 date2  $10         1

id2 date3  $10         2 

我在熊猫中使用factorize来做到这一点:

df.visits = 1 
df.visits = df.groupby('id')['date'].transform(lambda x: pd.factorize(x)[0]) 

我想通过SQL进行查询,查询是什么样的?

1 个答案:

答案 0 :(得分:0)

您需要DENSE_RANK()PARTITION BY

创建示例数据集:

IF OBJECT_ID('Source', 'U') IS NOT NULL 
  DROP TABLE Source; 

CREATE TABLE Source
(
  id varchar(30),
  Date varchar(30),
  purchase varchar(30)
)

INSERT INTO Source
VALUES
('id1', 'date1', '$10'),   
('id1', 'date1', '$50'),   
('id1', 'date2', '$30'),    
('id2', 'date1', '$10'),   
('id2', 'date2', '$10'),  
('id2', 'date3', '$10')

SELECT *, 
  DENSE_RANK() OVER (PARTITION BY id ORDER BY date) - 1 AS visit
FROM Source

输出

Output