我有一个如下所示的数据框,我想添加一列“ratings\u list”,它按id分组,并将评级放入一个列表中,列表索引是项目编号
id | item | rating
1 | 1 | 5
1 | 2 | 4
1 | 4 | 5
1 | 7 | 3
2 | 5 | 3
2 | 2 | 5
2 | 3 | 5
最理想的结果是
id | rating_list
1 | [5,4,0,5,0,0,3]
2 | [0,5,5,0,3,0,0]
其中,分级列表的长度是Dataframe中不同项目的数量。到目前为止,我有一个带有项目列表和评级列表的数据框,但我不确定这是否是合适的中间步骤
id | item_list | rating_list
1 | [1,2,4,7] | [5,4,5,3]
2 | [2,3,5] | [5,5,3]
这将是一个巨大的Dataframe,所以我更喜欢更快的东西。
3条答案
按热度按时间vaqhlq811#
你可以用自定义项来做这个。
您可能需要在udf中添加额外的逻辑来处理
n
唯一项,但有个项具有值> n
,在这种情况下,您将获得IndexError
.i2byvkas2#
试试这个
Spark2.4+
使用按文本分区的窗口将允许我们保持分区的加载状态,并在不执行collect操作的情况下计算max/min。7uzetpgm3#
下面是另一个基于观察的解决方案
max(item) == max_array_length
,如果假设无效,请告诉我。分析:迭代
idx
,如果当前项即i存在于items
使用其位置从具有ratings[array_position(items, i) - 1]
,否则为0。