我正在尝试简化Apache Spark(Python)中的数据框。
我有一个这样的数据框
person X N A B C D
NCC1701 1 16309 false true false false
NCC1864 1 16309 false false true false
...
我想对每行的X和N进行分组,例如groupBy('X','N'),但我想对AD每列显示的频率进行计数,例如false = 0和true = 1所以我得到这样的结果
X N A B C D
1 16309 0 1 1 0
简而言之,我试图将X和N列组合在一起,并为每对X和N分别获取“真”和“假”的总和。如果“真”和“假”是精确数字,我可能知道如何执行此操作,但我不知道如何将'true'设为1,将'false'设为0,然后求和。
如何将X和N的不同单元格分组在一起?
感谢您的时间
答案 0 :(得分:2)
使用cast
方法将数据类型从布尔值转换为整数,然后执行sum
:
import pyspark.sql.functions as f
cols = ['A', 'B', 'C', 'D']
df.groupBy('X', 'N').agg(*(f.sum(f.col(x).cast('int')).alias(x) for x in cols)).show()
+---+-----+---+---+---+---+
| X| N| A| B| C| D|
+---+-----+---+---+---+---+
| 1|16309| 0| 1| 1| 0|
+---+-----+---+---+---+---+