我试图计算特定值在子组中特定列中出现的比例。
示例Dataframe
pdf = pd.DataFrame({
'id': [1, 1, 1, 1, 2, 2, 2, 3, 3, 3],
'letter': ['L', 'A', 'L', 'L', 'L', 'L', 'L', 'A', 'L', 'L']
})
df = spark.createDataFrame(pdf)
df.show()
我试着依赖这个答案,但代码如下
df\
.groupby('id')\
.agg((count(col('letter') == 'L') / count(col('letter'))).alias('prop'))\
.show()
我得到了一列 1.0
,即使我改变了 'L'
至 'A'
.
我所期望的产出是,对于每一组来说 'L'
组内值:
+---+--------+
| id| prop|
+---+--------+
| 1| 0.75|
| 2| 1.0|
| 3| 0.66667|
+---+--------+
2条答案
按热度按时间iibxawm41#
在计算之前,需要使用
when
:请注意
count
只统计非空条目。它不仅重要true
条目,正如您在代码中所期望的那样。如果您使用count_if
来自spark sql。u2nhd7ah2#
你可以用
sum
与when
而是计算L
:这将仅在非空值中提供比例。如果要计算所有行,请除以
count("*")
而不是count(col('letter'))
.