Python Pyspark:将分类列转换为二进制数组
我有一个数据帧,其中有一个列,其中每个值都是字符串,我希望对其进行转换,以使特定id的字符串的每个外观(在不同的列中表示)都可以作为适当位置的数组中的一个。例如,如果我有此数据集:Python Pyspark:将分类列转换为二进制数组,python,pyspark,azure-databricks,Python,Pyspark,Azure Databricks,我有一个数据帧,其中有一个列,其中每个值都是字符串,我希望对其进行转换,以使特定id的字符串的每个外观(在不同的列中表示)都可以作为适当位置的数组中的一个。例如,如果我有此数据集: category id a 1 b 1 c 1 a 2 d 2 我希望将其转化为: id result 1 [1,1,1,0] 2 [1,0,0,1] 你知道怎么做吗 编辑:我尝试使用字符串索引器,但它所
category id
a 1
b 1
c 1
a 2
d 2
我希望将其转化为:
id result
1 [1,1,1,0]
2 [1,0,0,1]
你知道怎么做吗
编辑:我尝试使用字符串索引器,但它所做的只是在我真正想要获取数组本身时计算出现的数量。您可以先透视并用0填充null,然后将
id
列以外的列转换为数组:
import pyspark.sql.functions as F
res = df.groupBy('id').pivot("category").agg(F.count("category")).fillna(0)
res.select("id",F.array(*[F.col(i) for i in res.columns[1:]]).alias("result")).show()
请注意,如果元素可以重复,则计数可以大于1,在这种情况下,可以添加when+,否则:
(res.select("id",F.array(*[F.when(F.col(i)>=1,1).otherwise(0)
for i in res.columns[1:]]).alias("result"))).show()
(res.select("id",F.array(*[F.when(F.col(i)>=1,1).otherwise(0)
for i in res.columns[1:]]).alias("result"))).show()