當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python cudf.DataFrame.apply_rows用法及代碼示例


用法:

DataFrame.apply_rows(func, incols, outcols, kwargs, pessimistic_nulls=True, cache_key=None)

應用逐行的用戶定義函數。

參數

dfDataFrame

源 DataFrame 。

func函數

將在 CUDA GPU 上執行的轉換函數。

incols: list or dict

與函數參數匹配的輸入列的名稱列表。或者,將輸入列名稱映射到它們相應的函數參數的字典,例如 {‘col1’: ‘arg1’}。

outcols: dict

輸出列名稱及其 dtype 的字典。

kwargs: dict

name-value 的額外參數。這些值直接傳遞給函數。

pessimistic_nullsbool

當任何相應的輸入為空時,apply_rows 輸出是否應為空。如果為 False,則所有輸出都將為非空,但將是對基礎列數據應用 func 的結果,這可能是垃圾。

例子

用戶函數應該遍曆列並為每一行設置輸出。循環執行順序是任意的,因此循環的每次迭代必須彼此獨立。

當調用func時,將輸入/輸出對應的數組args進行跨步,以提高GPU並行度。函數中的循環類似於串行代碼,但在多個線程中同時執行。

>>> import cudf
>>> import numpy as np
>>> df = cudf.DataFrame()
>>> nelem = 3
>>> df['in1'] = np.arange(nelem)
>>> df['in2'] = np.arange(nelem)
>>> df['in3'] = np.arange(nelem)

為內核定義輸入列

>>> in1 = df['in1']
>>> in2 = df['in2']
>>> in3 = df['in3']
>>> def kernel(in1, in2, in3, out1, out2, kwarg1, kwarg2):
...     for i, (x, y, z) in enumerate(zip(in1, in2, in3)):
...         out1[i] = kwarg2 * x - kwarg1 * y
...         out2[i] = y - kwarg1 * z

使用輸入列的名稱、輸出列的名稱和 dtype 以及可選的額外參數的字典調用 .apply_rows

>>> df.apply_rows(kernel,
...               incols=['in1', 'in2', 'in3'],
...               outcols=dict(out1=np.float64, out2=np.float64),
...               kwargs=dict(kwarg1=3, kwarg2=4))
   in1  in2  in3 out1 out2
0    0    0    0  0.0  0.0
1    1    1    1  1.0 -2.0
2    2    2    2  2.0 -4.0

相關用法


注:本文由純淨天空篩選整理自rapids.ai大神的英文原創作品 cudf.DataFrame.apply_rows。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。