我想在使用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.ListSlice
的pad
和pad_value
参数填充列表列。