[英]Sql query to do pandas factorise. cumulative sum after a group by?
我有這個數據框:基本上每一行都是一個客戶在一天內完成的交易。 同一客戶在同一天和不同日期進行多筆交易。 我想為客戶提供以前訪問次數的列。
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的pandas中這樣做:
df.visits = 1
df.visits = df.groupby('id')['date'].transform(lambda x: pd.factorize(x)[0])
我想通過SQL來做,查詢會是什么樣的?
你需要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
產量
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.