Мой фрейм данных выглядит следующим образом:
cola, colb
1, 2
1, 3
2, 1
2, 5
Я хочу добавить столбец count
:
cola, colb, count
1, 2, 1
1, 3, 2
2, 1, 1
2, 5, 2
Нужно сгруппировать colA и установить счетчик на 1 для первой записи, а затем увеличить каждую последующую строку на 1.
Я попытался использовать оконную функцию, но она применяет один и тот же счет ко всем записям в colA без приращения.
Вы уже поняли, что оконная функция — это то, что нужно. Возможно, вы не использовали функцию классифицировать.
import pyspark.sql.functions as F
from pyspark.sql import Window
l = [(1 , 2),
(1 , 3 ),
(1 , 2 ),
(2 , 1 ),
(2 , 5)]
columns = ['cola', 'colb']
df=spark.createDataFrame(l, columns)
w = Window.partitionBy('cola').orderBy('colb')
df = df.withColumn('count', F.rank().over(w))
df.show()
Выход:
+----+----+-----+
|cola|colb|count|
+----+----+-----+
| 1| 2| 1|
| 1| 2| 1|
| 1| 3| 3|
| 2| 1| 1|
| 2| 5| 2|
+----+----+-----+
Если вы не хотите пробелов после одинаковых строк, вы должны использовать функцию плотный_ранг.
искал аналогичную информацию. Спасибо!