我想对数据框中的分区的行号进行循环,以检查条件并根据当前 row_number 的结果创建额外的列。
所以,我有一个数据框表示与主 ID <-> 原始 ID 关联的联系人(一个主可以有多个原始)。我用窗口函数和 row_number() 在最近创建的 raws 的分区上对这个数据框进行了分区:
# Create a window specification to define the partitionning of masters
# base on the most recent created
window_spec = Window \
.partitionBy(raw_df.master_id) \
.orderBy(raw_df.created.desc())
# Create a dataframe with a row number for each partition to process
# raws grouped with their master from the most recent to the least
partionned_df = raw_df \
.select(
fields + [
F.row_number().over(window_spec).alias('row_nb')
]
) \
.orderBy(['master_id', 'row_nb'])
这是我的数据框:
partionned_df.show()
+------+---+---------------+---------+------------+-------------+------+
|master|raw| created|last_name|mobile_phone|norm_civility|row_nb|
+------+---+---------------+---------+------------+-------------+------+
| 1| 3|02-05 11:22:...| null| 641203047| null| 1|
| 1| 5|02-05 11:22:...| null| null| monsieur| 2|
| 1| 6|02-05 11:22:...| null| null| null| 3|
| 1| 1|02-05 10:29:...| name1| null| mr| 4|
| 3| 11|02-05 11:26:...| null| null| monsieur| 1|
| 3| 4|02-05 10:30:...| null| 630254175| null| 2|
| 5| 15|02-05 11:35:...| null| null| null| 1|
| 5| 13|02-05 11:35:...| null| null| null| 2|
| 5| 14|02-05 11:33:...| name3 | null| monsieur| 3|
| 5| 7|02-05 11:22:...| null| null| null| 4|
+---+------+---------------+---------+------------+-------------+------+
我想要的是在对每个分区的 row_number 进行迭代并执行一些条件(例如,如果 first_name 不为空等)之后创建一个只有不同的主数据和新列的新数据帧,并且如果条件没有在第一个验证分区的row_nb,检查另一个等,直到我循环分区的每个行号。
我想要的最终数据框类似于:
+------+---------+------------+-------------+
|master|last_name|mobile_phone|norm_civility|
+------+---------+------------+-------------+
| 1| name1| 641203047| monsieur |
| 3| null| 630254175| monsieur |
| 5| name3| null| monsieur |
+------+---------+------------+-------------+
非常感谢您提前提供的帮助。