如何在cuDF数据框架中填充列表列?



我想在使用groupby操作收集后对每个列表执行填充操作。

概念实现如下:

df = cudf.DataFrame({"g": [1, 1, 1, 2, 2, 3], "a": [1, 2, 3, 1, 3, 1]})
df.groupby("g")["a"].collect().list.pad(max_length=3, pad_left=True, drop="last", padding_value=-1)

预期输出:

g
1      [1, 2, 3]
2     [-1, 1, 3]
3    [-1, -1, 1]

如何做到这一点?

转换pandas数据框架并应用' np。Pad的操作正常,但似乎有点笨拙和缓慢。在cuDF/cuPy中有什么方法可以做到吗?

cudf.from_pandas(
df.groupby("g")["a"]
.collect()
.to_pandas()
.apply(lambda x: np.pad(x, (max(3 - len(x), 0), 0), constant_values=(-1,)))
)

出口。.apply()函数到列表类型的cuDF序列会引发NumbaNotImplementedError

NumbaNotImplementedError: list
df = cudf.DataFrame({"g": [1, 1, 1, 2, 2, 3], "a": [1, 2, 3, 1, 3, 1]})
df.groupby("g")["a"].collect().apply(
lambda x: np.pad(x, (max(3 - len(x), 0), 0), constant_values=(-1,))
)

这个问题在RAPIDS cuDF github repo中得到了回答,我只是关闭了循环。

Nick Becker分享了这个链接到NVTabular,它演示了如何使用nvtabular.ops.ListSlicepadpad_value参数填充列表列。

最新更新