Python 组中两列中的对的pyspark count not null值
我有一些这样的数据Python 组中两列中的对的pyspark count not null值,python,group-by,count,pyspark,null,Python,Group By,Count,Pyspark,Null,我有一些这样的数据 A B C 1 Null 3 1 2 4 2 Null 6 2 2 Null 2 1 2 3 Null 4 我想按A分组,然后计算不包含Null值的行数。因此,结果应该是 A count 1 1 2 1 3 0 我认为这行不通,是吗 df.groupby('A').agg(count('B','C')) 您可以删除包含空值的行,然后删除groupby+count: df.
A B C
1 Null 3
1 2 4
2 Null 6
2 2 Null
2 1 2
3 Null 4
我想按A分组,然后计算不包含Null值的行数。因此,结果应该是
A count
1 1
2 1
3 0
我认为这行不通,是吗
df.groupby('A').agg(count('B','C'))
您可以删除包含空值的行,然后删除groupby+count: df.选择“A”。删除重复项。加入 df.dropnahow='any'.groupby'A'.count,on=['A'],how='left' 显示 +--+---+ |伯爵| +--+---+ | 1| 1| |3 |零| | 2| 1| +--+---+ 如果不想执行联接,请创建另一列以指示列B或C中是否存在null: 导入pyspark.sql.f函数 df.selectExpr'*', '如果B不为空,C不为空,则1或0结束为D' .groupby'A'.aggf.sum'D'.alias'count'.show +--+---+ |伯爵| +--+---+ | 1| 1| | 3| 0| | 2| 1| +--+---+
就个人而言,我会使用一个辅助列来说明B或C是否为Null。此解决方案中的结果为负值,并返回1或0。并对该列使用sum 从pyspark.sql.functions导入总和,当 ... df.withColumns不为空,当df.B.isNull | df.C.isNull时,0.otherwise1\ .groupByA.aggsumisNotNull 演示: df.show +--+--+--+ | _1| _2| _3| +--+--+--+ |1 |空| 3| | 1| 2| 4| |2 |空| 6| |2 | 2 |空| | 2| 1| 2| |3 |空| 4| +--+--+--+ df.withcolumns不为空,当df._2.isNull | df._3.isNull,0.otherwise1.show +--+--+--+-----+ |_1 | | u 2 | | u 3 |不为空| +--+--+--+-----+ |1 |空| 3 | 0| | 1| 2| 4| 1| |2 |零| 6 | 0| |2 | 2 |零| 0| | 2| 1| 2| 1| |3 |零| 4 | 0| +--+--+--+-----+ df.withcolumns不为空,当df._2.isNull | df._3.isNull,0.otherwise1\ .groupBy_1.aggsumisNotNull.show +--+-------+ || sumisNotNull| +--+-------+ | 1| 1| | 3| 0| | 2| 1| +--+-------+
嗨,Psidom,很抱歉我忘了更新我的问题。请看编辑后的问题。我真的不想使用连接将所有类别保留在“A”中,但在这个过程中,我想我需要做一个左连接。非常感谢。