【发布时间】:2020-08-07 09:57:06
【问题描述】:
数据框已经按日期排序,
col1 ==1 值是唯一的,
只有 0 有重复。
我有一个看起来像这样的数据框,称之为 df
+--------+----+----+
date |col1|col2|
+--------+----+----+
2020-08-01| 5| -1|
2020-08-02| 4| -1|
2020-08-03| 3| 3|
2020-08-04| 2| 2|
2020-08-05| 1| 4|
2020-08-06| 0| 1|
2020-08-07| 0| 2|
2020-08-08| 0| 3|
2020-08-09| 0| -1|
+--------+----+----+
条件是当 col1 == 1 时,我们从 col2 ==4 开始向后添加,(例如 4,5,6,7,8,...) 而后 col2 == 4 一路返回 0(例如 4,0,0,0,0...)
所以,我的结果 df 看起来像这样。
+--------+----+----+----+
date |col1|col2|want
+--------+----+----+----+
2020-08-01| 5| -1| 8 |
2020-08-02| 4| -1| 7 |
2020-08-03| 3| 3| 6 |
2020-08-04| 2| 2| 5 |
2020-08-05| 1| 4| 4 |
2020-08-06| 0| 1| 0 |
2020-08-07| 0| 2| 0 |
2020-08-08| 0| 3| 0 |
2020-08-09| 0| -1| 0 |
+---------+----+----+----+
增强: 我想在 col1 == 1 行时添加额外的条件 col2 == -1,并且 -1 连续,然后我想计算连续的 -1,然后添加下一个 col2 == ?价值。所以这里有一个例子来清除。
+--------+----+----+----+
date |col1|col2|want
+--------+----+----+----+
2020-08-01| 5| -1| 11|
2020-08-02| 4| -1| 10|
2020-08-03| 3| 3| 9 |
2020-08-04| 2| 2| 8 |
2020-08-05| 1| -1| 7 |
2020-08-06| 0| -1| 0 |
2020-08-07| 0| -1| 0 |
2020-08-08| 0| 4| 0 |
2020-08-09| 0| -1| 0 |
+---------+----+----+----+
所以,我们看到 3 个连续的 -1,(我们只关心第一个连续的 -1)并且在连续之后我们有 4 个,那么我们将在 col1 = 处有 4+ 3 =7 =1 行。有可能吗?
【问题讨论】:
-
任何帮助或如何开始这种方法将不胜感激!
-
如果
col1有多个1值会怎样?我已经可以看到0的重复项,其他值是否也存在重复项?在这种情况下,正确的排序是什么? -
col1 中的值 1 将是唯一的。通过 1 后它将为 0。在这种情况下,唯一的重复项是 0。
-
在排序方面,我们无法对其进行排序,不幸的是它们取决于我未包含在此数据框中的日期..
-
你能用所有相关信息更新问题吗?使用排序和排名可以 100% 解决上述问题,但如果无法使用排序,也许还有其他方法可以提供帮助
标签: python apache-spark pyspark apache-spark-sql