PySpark:在组内进行分组并根据某些值在单独的字段中显示总和

问题描述 投票:0回答:1

我有一个数据框,其中包含公司名称、EmpId、奖金和薪水。

公司 EMPID 奖金 薪资
苹果 1234 没有 5
苹果 1235 没有 7
谷歌 6786 是的 6
谷歌 6787 没有 5
谷歌 6788 没有 6
目标 9091 是的 4
目标 9092 是的 1
目标 9093 是的 9
目标 9094 没有 2
目标 9094 是的 4

我想按公司名称分组,而不考虑 EmpIds,并创建 2 个不同的列,以显示公司收到的奖金和工资的总和。

预期输出:

公司 TOT_AMT_NO_BONUS 总计_奖金
苹果 12 0
谷歌 11 6
目标 2 18

尝试使用 groupBy、Aggregate 和 Sum,但未获得预期结果。如果有人可以提供帮助,请感激。预先感谢。

dataframe apache-spark pyspark aws-glue pyspark-pandas
1个回答
0
投票

您可以按公司分组,以奖金为基础,并对工资求和,然后用 0 填充任何空条目:

sparkDF.groupby('COMPANY').pivot('BONUS').sum('salary').withColumnRenamed(
    'No', 'TOT_AMT_NO_BONUS',
).withColumnRenamed(
    'Yes', 'TOTAL_BONUS'
).fillna(
    value=0, subset=['TOT_AMT_NO_BONUS','TOTAL_BONUS']
)

+-------+----------------+-----------+
|COMPANY|TOT_AMT_NO_BONUS|TOTAL_BONUS|
+-------+----------------+-----------+
|  APPLE|              12|          0|
| TARGET|               2|         18|
| GOOGLE|              11|          6|
+-------+----------------+-----------+
© www.soinside.com 2019 - 2024. All rights reserved.