У меня есть следующий фрейм данных, который упорядочен "col1".
+----+----+
|col1|col2|
+----+----+
| a| x|
| a| x|
| a| y|
| b| x|
| b| z|
| c| x|
| c| y|
| d| z|
| d| x|
+----+----+
Я хочу добавить новый столбец с именем "col3" таким образом, чтобы для каждой строки в уникальной группе ('a', 'b', 'c' 'd') в "col1", если значение "col2" в ('x' или 'y') увеличивает значение на 1, иначе, если значение равно 'z', или любое другое значение переносит значение. например, в первой строке для «a», поскольку col2 равно x, мы увеличиваем 1, добавляя 0 + 1 = 1, во второй строке, поскольку col2 снова x, мы увеличиваем 1 + 1 = 2 и так далее. Для второй группы, в которой значения col1 равны b (4-я строка), мы начинаем новое, а поскольку значение col2 равно x, мы увеличиваем 0 + 1 = 1. в 5-й строке, поскольку значение col2 равно z, мы не увеличиваем и принимаем предыдущее значение, т.е. 1 . В случае «d» (8-й ряд). поскольку значение col2 не в x или y, мы не увеличиваем его и оставляем его равным 0.
+----+----+----+
|col1|col2|col3|
+----+----+----+
| a| x| 1|
| a| x| 2|
| a| y| 3|
| b| x| 1|
| b| z| 1|
| c| x| 1|
| c| y| 2|
| d| z| 0|
| d| x| 1|
+----+----+----+
В любом случае, я могу добиться этого без использования UDF в pyspark