У меня есть упорядоченные данные, в которых есть иерархия событий. Каждый столбец представляет собой уникальный идентификатор события по отношению к событию над ним в иерархии. Это похоже на то, как каждый номер дня уникален в месяце, а каждый номер месяца уникален в году. Я хочу, чтобы самый низкий уровень был уникальным в пределах самого высокого уровня, например, чтобы каждый день был уникальным в году с помощью нумерации от 1 до 365. Мой вариант использования не привязан к дням, месяцам и годам.
До:
| ID | EVENT_1 | EVENT_2 | EVENT_3 |
| -- | ------- | ------- | ------- |
| 1 | 1 | 1 | 1 |
| 1 | 1 | 1 | 2 |
| 1 | 1 | 1 | 3 |
| 1 | 1 | 2 | 1 |
| 1 | 1 | 2 | 2 |
| 1 | 1 | 3 | 1 |
| 1 | 1 | 3 | 2 |
| 1 | 2 | 1 | 1 |
| 1 | 2 | 1 | 2 |
После:
| ID | EVENT_1 | EVENT_2 | EVENT_3 | EVENT_3A |
| -- | ------- | ------- | ------- | -------- |
| 1 | 1 | 1 | 1 | 1 |
| 1 | 1 | 1 | 2 | 2 |
| 1 | 1 | 1 | 3 | 3 |
| 1 | 1 | 2 | 1 | 4 |
| 1 | 1 | 2 | 2 | 5 |
| 1 | 1 | 3 | 1 | 6 |
| 1 | 1 | 3 | 2 | 7 |
| 1 | 2 | 1 | 1 | 1 |
| 1 | 2 | 1 | 2 | 2 |
Цель состоит в том, чтобы получить столбец, в котором для каждого идентификатора существует EVENT_3A, так что EVENT_3A - это порядок, в котором EVENT_3 происходит по отношению к EVENT_1 (как если бы не было EVENT_2). Кроме того, существует множество идентификаторов, для которых это необходимо вычислять независимо. Сейчас я делаю это на процессоре, но это занимает много времени, поэтому я хотел бы переключиться на выполнение этого на графическом процессоре.
Моя основная идея - сделать groupby('ID').apply_grouped()
или groupby('ID').agg()
, но я не знаю, что добавить в функции apply_grouped()
или agg()
. Раньше я делал это с помощью dask на ЦП, но это было более интуитивно понятно, потому что сгруппированный DataFrame передавался непосредственно в функцию apply()
. Кажется, что в cuDF мне нужно передать incols, и я не могу понять, как рассматривать их как DataFrame.
Существует около 5000 идентификаторов, поэтому в идеале каждый сгруппированный идентификатор будет обрабатываться ядром в графическом процессоре, но я не уверен, может ли это работать так, поскольку я новичок в программировании для графического процессора.
Любые предложения или решения полезны, спасибо.