У меня есть датафрейм
id lat long lag_lat lag_long detector lag_interval gpsdt lead_gpsdt
1 12 13 12 13 1 [1.5,3.5] 4 4.5
1 12 13 12 13 1 null 4.5 5
1 12 13 12 13 1 null 5 5.5
1 12 13 12 13 1 null 5.5 6
1 13 14 12 13 2 null 6 6.5
1 13 14 13 14 2 null 6.5 null
2 13 14 13 14 2 [0.5,1.5] 2.5 3.5
2 13 14 13 14 2 null 3.5 4
2 13 14 13 14 2 null 4 null
, поэтому я хотел применить условие при использовании groupby в функции agg, что если мы сделаем groupby col ("id") и col ("detector"), тогда я хочупроверить условие, что если lag_interval в этой группе имеет ненулевое значение, то при агрегации я хочу два столбца, один из которых
min("lag_interval.col1") and other is max("lead_gpsdt")
Если вышеуказанное условие не выполняется, то я хочу
min("gpsdt"), max("lead_gpsdt")
используя этот подход, я хочу получить данные с условием
df.groupBy("detector","id").agg(first("lat-long").alias("start_coordinate"),
last("lat-long").alias("end_coordinate"),struct(min("gpsdt"), max("lead_gpsdt")).as("interval"))
output
id interval start_coordinate end_coordinate
1 [1.5,6] [12,13] [13,14]
1 [6,6.5] [13,14] [13,14]
2 [0.5,4] [13,14] [13,14]
**
для более подробного объяснения
** если мы видим, что часть того, что делает groupby («id», «Detector»), принимает участие,
мы должны видеть, что если в этой группе данныхесли одно из значений в столбце col ("lag_interval") не равно нулю, то нам нужно использовать агрегацию, например: min (lag_interval.col1), max (lead_gpsdt) , это условие будет применяться к нижнему набору данных
id lat long lag_lat lag_long detector lag_interval gpsdt lead_gpsdt
1 12 13 12 13 1 [1.5,3.5] 4 4.5
1 12 13 12 13 1 null 4.5 5
1 12 13 12 13 1 null 5 5.5
1 12 13 12 13 1 null 5.5 6
и если в этой группе данных значение col ("lag_interval") all равно нулю, нам нужновыходной сигнал как min ("gpsdt"), max ("lead_gpsdt") это условие будет применяться к нижнему набору данных
id lat long lag_lat lag_long detector lag_interval gpsdt lead_gpsdt
1 13 14 12 13 2 null 6 6.5
1 13 14 13 14 2 null 6.5 null