我有一个数据框,其中包含公司名称、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,但未获得预期结果。如果有人可以提供帮助,请感激。预先感谢。
您可以按公司分组,以奖金为基础,并对工资求和,然后用 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|
+-------+----------------+-----------+