【发布时间】:2020-03-12 17:54:15
【问题描述】:
我有一个数据框,其中包含如下列:
colA colB colC colD colE flag
A X 2018Q1 500 600 1
A X 2018Q2 200 800 1
A X 2018Q3 100 400 1
A X 2018Q4 500 600 1
A X 2019Q1 400 7000 0
A X 2019Q2 1500 6100 0
A X 2018Q3 5600 600 1
A X 2018Q4 500 6007 1
A Y 2016Q1 900 620 1
A Y 2016Q2 750 850 0
A Y 2017Q1 750 850 1
A Y 2017Q2 750 850 1
A Y 2017Q3 750 850 1
A Y 2018Q1 750 850 1
A Y 2018Q2 750 850 1
A Y 2018Q3 750 850 1
A Y 2018Q4 750 850 1
colA, colB 级别的行通过统计检查,如果在colA, colB 级别,flag==1 的值对continuous 4 quarters 的数据进行了一次排序后。
我们必须像这样大步前进:2018Q1-2018Q4 then 2018Q2-2019Q1 .... 依此类推,如果有 4 个连续的季度并且 flag==1,那么我们将其标记为 1。
最终的输出会是这样的:
colA colB colC colD colE flag check_qtr
A X 2018Q1 500 600 1 1
A X 2018Q2 200 800 1 1
A X 2018Q3 100 400 1 1
A X 2018Q4 500 600 1 1
A X 2019Q1 400 7000 0 0
A X 2019Q2 1500 6100 0 0
A X 2018Q3 5600 600 1 0
A X 2018Q4 500 6007 1 0
A Y 2016Q1 900 620 1 0
A Y 2016Q2 750 850 0 0
A Y 2017Q1 750 850 1 0
A Y 2017Q2 750 850 1 0
A Y 2017Q3 750 850 1 0
A Y 2018Q1 750 850 1 1
A Y 2018Q2 750 850 1 1
A Y 2018Q3 750 850 1 1
A Y 2018Q4 750 850 1 1
- 我们如何使用 pandas 和 numpy 做到这一点?
- 我们可以使用 sql 来实现吗?
【问题讨论】:
-
您使用的是哪个数据库?
-
亚马逊的红移
-
在您的样本数据第 7 行有 2018Q2 即数据未排序。是这种情况还是样本数据是这样的?
-
如果上面不是这样,那么你可以使用下面的sql
select colA , colB, colC , colD, colE, flag, CASE WHEN flag = 1 AND lead (flag, 1) OVER(PARTITION BY COLA ORDER BY colC ASC) = 1 AND lead (flag, 2) OVER(PARTITION BY COLB ORDER BY colC ASC) = 1 AND lead (flag, 3) OVER(PARTITION BY COLB ORDER BY colC ASC) = 1 THEN 1 ELSE 0 END as check_qtr from tab order by colB, colC; -
如何用python编写这段sql代码?
标签: sql python-3.x