我有一些有序数据,其中有事件层次结构。每列是一个事件的唯一 id,相对于层次结构中它上面的事件。类似于每天的数字在一个月中是唯一的,而每个月的数字在一年中是唯一的。我想让最低级别在最高级别中是唯一的,例如通过从 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 |
目标是获得一个列,其中对于每个 id,都有一个 EVENT_3A,使得 EVENT_3A 是 EVENT_3 相对于 EVENT_1 发生的顺序(好像没有 EVENT_2)。此外,还有许多 ID 必须单独计算。现在我正在 CPU 上执行此操作,但需要很长时间,所以我想切换到 GPU 上执行此操作。
我的主要想法是做一个groupby('ID').apply_grouped()
orgroupby('ID').agg()
但我不知道在apply_grouped()
oragg()
函数中放什么。我之前在 CPU 上使用 dask 执行此操作,但它更直观,因为分组的 DataFrame 直接传递给apply()
函数。似乎在 cuDF 中我必须通过 incols 并且我无法弄清楚如何将它们视为 DataFrame。
大约有 5,000 个 ID,因此理想情况下,每个分组的 ID 都将由 GPU 中的一个核心处理,但我不确定它是否可以这样工作,因为我是 GPU 编程的新手。
任何建议或解决方案都有帮助,谢谢。