Давайте предположим, что у нас есть такие данные (отсортированные по времени) и мы создали фиктивный столбец для классов в фрейме данных Pyspark:
ID class e_TYPE_B e_TYPE_C e_TYPE_L e_TYPE_A e_TYPE_E e_TYPE_G
1 G 0 0 0 0 0 1
1 B 1 0 0 0 0 0
1 B 1 0 0 0 0 0
2 E 0 0 0 0 1 0
2 E 0 0 0 0 1 0
2 C 0 1 0 0 0 0
2 C 0 1 0 0 0 0
2 E 0 0 0 0 1 0
2 E 0 0 0 0 1 0
3 L 0 0 1 0 0 0
3 L 0 0 1 0 0 0
3 B 1 0 0 0 0 0
3 E 0 0 0 0 1 0
4 A 0 0 0 1 0 0
4 A 0 0 0 1 0 0
5 B 1 0 0 0 0 0
5 B 1 0 0 0 0 0
5 A 0 0 0 1 0 0
5 A 0 0 0 1 0 0
Теперь я пытаюсь выяснить количество идентификаторов, перемещающихся из одного класса в другой. Он может быть последовательным или иметь некоторые другие классы между ними. Отношение должно быть создано для каждого класса сверху вниз на основе идентификатора.
Например,
- ID 1 переходит от G к B, затем 1 следует добавить к счетчику G к B,
- ID 2 переходит от E к C, затем 1 следует добавить к счетчику E к C,
- ID 2 переходит от C к E, затем 1 следует добавить к счетчику C к E,
- ID 3 переходит от L к B, затем 1 следует добавить к счетчику L к B,
- ID 3 переходит от B к E, затем 1 следует добавить к счетчику B к E,
- Также ID 3 идет от L к E, затем 1 следует добавить к счетчику L к E,
- ID 4 имеет только один класс, поэтому его следует отбросить
Я думал об использовании операции Window, которая должна разделять по идентификатору, но как перебрать раздел для вычисления числа вышеупомянутых отношений классов - это то, над чем я борюсь.
Пожалуйста, предоставьте решение / фрагмент кода для этого.
Спасибо.