我有一个包含多列且只有1和0值的数据框。
看起来像这样:
时间A B C D
xxxx 0 0 0 0
xxxx 0 1 0 1
xxxx 0 0 0 1
我想算一下,我一天有多少时间(对应错误)。 我看到如何用一列来做到这一点:
errors = (df.filter('A=1')
.select(to_date(df.time).alias('day'),df.A)
.groupBy('day')
.count()
)
这对我来说是一个专栏的好结果,虽然它在一天内没有错误时不给我0(我想得到所有的日子,如果没有错误,则为0)。< / p>
我一直试图将其解析为所有列。 我还想避免(如果可能的话)为每个列做这个,然后加入,因为我有8列。
有任何帮助吗? 谢谢!
答案 0 :(得分:3)
好的,你走了。考虑到样品质量低,我刚刚简化了日期解析步骤,但想法就在这里。
因此,请考虑以下DataFrame df
:
+----+---+---+---+---+
|time| A| B| C| D|
+----+---+---+---+---+
|xxxx| 0| 0| 0| 0|
|xxxx| 0| 1| 0| 1|
|xxxx| 0| 0| 0| 1|
+----+---+---+---+---+
您只需要在每列上使用聚合函数sum
,如下所示:
from pyspark.sql import functions as F
df.groupBy('time') \
.agg(F.sum('A').alias("A"),F.sum('B').alias("B"),F.sum('C').alias("C"),F.sum('D').alias("D")) \
.show()
# +----+---+---+---+---+
# |time| A| B| C| D|
# +----+---+---+---+---+
# |xxxx| 0| 1| 0| 2|
# +----+---+---+---+---+