我有以下数据框。
rdd=sc.parallelize([(1,'001'),(2,'001'),(3,'010')])
df=rdd.toDF(['Rec_Num','Val'])
df.show()
Rec_Num|Val
1|001
2|001
3|010
我还有一个列名列表。
l=['Name','Age','Joining_date']
我想要的输出是如下数据帧:
Name|0
Age|1
Joining_date|2
Total|3
第一列是列表l
的元素。第二列是df
中Val列的每个索引中的1。即Val
的第一个索引的值为0 0 0;因此输出为0,第二个索引的值为0 0和1,因此年龄为1,加入日期为2。
此外,最后一行是df
中的行数。
这是我尝试过的。
df1=df.select(split(df['Val'],''))
这给了我一个数组列,我想到将其拆分为不同的列,并转置并找到1的总和或计数,然后创建另一个数据帧。但是我被困在这里。
df
中的行数可以变化,列表l
中的元素数也可以变化。我想写一个通用的解决方案,以便它可以合并任意数量的列。