イベントの階層がある順序付けられたデータがあります。各列は、階層内でその上のイベントに関連するイベントの一意の 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 のプログラミングは初めてなので、そのように機能するかどうかはわかりません。
提案や解決策は役に立ちます、ありがとう。