如何划分两个聚合总和数据框

Posted

技术标签:

【中文标题】如何划分两个聚合总和数据框【英文标题】:How to divide two aggreate sum dataframe 【发布时间】:2020-03-27 02:00:40 【问题描述】:

我想将pyspark中两列的和相除,例如我下面有一个数据集

    A  B  C
 1  1  2  3
 2  1  2  3
 3  1  2  3

我想要得到 colA 的总和除以 colB 的总和,如下所示

  6 (Sum of colB)  / 3 (Sum of colA) = 2

我尝试的是

sumofA = df.groupby().sum('A') 
sumofB = df.groupby().sum('B')

Result = B / A

但产生错误:

TypeError: unsupported operand type(s) for /: 'DataFrame' and 'DataFrame'

提前致谢。

【问题讨论】:

【参考方案1】:

您的方法是正确的,但您只能在聚合函数内进行计算。

from pyspark.sql import functions as F
df.groupBy().agg(F.sum("B")/F.sum("A")).show()
+-----------------+
|(sum(B) / sum(A))|
+-----------------+
|              2.0|
+-----------------+

或者,您可以使用collect()[0][0]

收集它作为
from pyspark.sql import functions as F
a=df.groupBy().agg(F.sum("B")/F.sum("A")).collect()[0][0]
a

Out[5]: 2.0

【讨论】:

以上是关于如何划分两个聚合总和数据框的主要内容,如果未能解决你的问题,请参考以下文章

Django聚合:两个字段相乘的总和

聚合查询中由另一个字段分组的两个 int 数组的总和

合并两个具有聚合列值的数据框作为结果

两个聚合函数分组

Pandas Groupby:同一列上的聚合,但总计基于两个不同的标准/数据框

data.table 分组所有列的总和