当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。