У меня есть искровой фрейм с этим форматом:
opp_id__reference|oplin_status| stage| std_amount| std_line_amount|
+-----------------+------------+--------------------+----------------+----------------+
|OP-171102-67318| Won|7 - Deliver & Val...|6243.316662349|6243.31666234948|
|OP-180910-77114| Won|7 - Deliver & Val...|5014.57880858921|5014.57880858921|
|OP-180910-76544| Pending|7 - Deliver & Val...|5014.57880858921|5014.57880858921|
|OP-180910-76544| Pending|7 - Deliver & Val...|5014.57880858921|5614.57880858921|
|OP-180910-76544| Won|7 - Deliver & Val...|5014.57880858921|5994.57880858921|
Я хотел бы извлечь список opp_id__reference
, в котором сумма записей, которая имеет oplin_status = "В ожидании" больше, чем std_amount
Это привет, который я сделал:
# select opp_line which stage =='7 - Deliver & Validate' and oplin_status =='Pending'
DF_BR8 = df.filter(df.stage.contains("7 - Deliver")).select('opp_id__reference', 'oplin_status', 'stage', 'std_amount', 'std_line_amount')
DF_BR8_1 = DF_BR8.groupby('opp_id__reference', 'std_amount', 'oplin_status').agg({'std_line_amount': 'sum'}).withColumnRenamed('sum(std_line_amount)','sum_column')
DF_res = DF_BR8_1.filter(DF_BR8_1.oplin_status.contains("Pending"))
DF_res1 =DF_res.filter(DF_res.sum_column <= 0.3*DF_BR8_1.std_amount)
Мой вопрос: правильно ли я? Есть ли другой способ сделать проще?
Спасибо