У меня есть фрейм данных с этой структурой
Я хотел бы добавить столбец, в котором отображается «Родительский элемент» для каждого элемента. Родительский элемент — это первый родительский тип, за которым следует каждый дочерний элемент. Нет никаких отношений или ссылок, которые можно было бы использовать. Номер строки определяет детей для каждого родителя.
Номер родительского элемента должен повторяться до тех пор, пока не будет найден новый родительский элемент. Я попытался добавить столбец LAG для проверок, но не смог четко понять логику. Я чувствовал, что мне нужно больше одной колонки, но я не мог этого сделать.
Я также попробовал оконную функцию, чтобы «сгруппировать» их по номеру строки, разделить по номеру заказа и типу, но это не работает, поскольку отделяет родителей от детей.
Попробуй это:
from pyspark.sql import functions as F
from pyspark.sql.window import Window
df = df.withColumn(
"Parent_Item",
F.last(F.when(F.col("Type") == "Parent", F.col("Item")), ignorenulls=True).over(
Window.partitionBy("Order Number").orderBy("Line Number")
),
)
df.show()
Выход:
+------------+-----------+----+------+-----------+
|Order Number|Line Number|Item| Type|Parent_Item|
+------------+-----------+----+------+-----------+
| 12345| 1|1001|Parent| 1001|
| 12345| 2|1002| Child| 1001|
| 12345| 3|1003| Child| 1001|
| 12345| 4|1004| Child| 1001|
| 12345| 5|1005|Parent| 1005|
| 12345| 6|1006| Child| 1005|
+------------+-----------+----+------+-----------+
Ответы только на код не одобряются, вам действительно следует добавить объяснение.