1

イベントの階層がある順序付けられたデータがあります。各列は、階層内でその上のイベントに関連するイベントの一意の ID です。1 か月で各日の番号が一意であり、1 年で各月の数値が一意であることに似ています。1 から 365 までの番号を付けて 1 年で毎日を一意にするように、最下位レベルを最上位レベル内で一意にしたいと考えています。私の使用例は、日、月、年に固有のものではありません。

前:

| 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_1 に関して EVENT_3 が発生する順序である列を取得することです (あたかも EVENT_2 がなかったかのように)。さらに、これを個別に計算する必要がある多くの ID があります。今はCPUでやっているのですが、時間がかかるのでGPUに切り替えたいと思っています。

私の主なアイデアはgroupby('ID').apply_grouped()orを実行することですが、 or関数groupby('ID').agg()に何を入れればよいかわかりません。以前は CPU 上の dask でこれを行っていましたが、グループ化された DataFrame が関数に直接渡されるため、より直感的でした。cuDF では incols を渡す必要があり、それらを DataFrame として扱う方法がわかりません。apply_grouped()agg()apply()

約 5,000 個の ID があるため、グループ化された各 ID が GPU のコアによって処理されるのが理想的ですが、GPU のプログラミングは初めてなので、そのように機能するかどうかはわかりません。

提案や解決策は役に立ちます、ありがとう。

4

1 に答える 1