pyspark - PySpark DataFrame 根据其他列中的值乘以列
问题描述
Pyspark 新手在这里。我有一个数据框,比如说,
+------------+-------+----+
| id| mode|count|
+------------+------+-----+
| 146360 | DOS| 30|
| 423541 | UNO| 3|
+------------+------+-----+
我想要一个带有新列的数据框aggregate
,count * 2
模式是什么时候'DOS'
,模式是什么时候count * 1
'UNO'
+------------+-------+----+---------+
| id| mode|count|aggregate|
+------------+------+-----+---------+
| 146360 | DOS| 30| 60|
| 423541 | UNO| 3| 3|
+------------+------+-----+---------+
感谢您的投入以及一些最佳实践的指导:)
解决方案
方法 1:使用pyspark.sql.functions
with when
:
from pyspark.sql.functions import when,col
df = df.withColumn('aggregate', when(col('mode')=='DOS', col('count')*2).when(col('mode')=='UNO', col('count')*1).otherwise('count'))
方法 2:使用 SQL CASE 表达式selectExpr
:
df = df.selectExpr("*","CASE WHEN mode == 'DOS' THEN count*2 WHEN mode == 'UNO' THEN count*1 ELSE count END AS aggregate")
结果:
+------+----+-----+---------+
| id|mode|count|aggregate|
+------+----+-----+---------+
|146360| DOS| 30| 60|
|423541| UNO| 3| 3|
+------+----+-----+---------+
推荐阅读
- oracle - 连接来自两个不同数据库 Oracle 和 postgreSQL 的表
- gis - 将地理空间数据从北/东重新投影到东/北
- python - 十进制列表索引超出范围
- java - 如何验证 Null 值的嵌套对象
- bash - 如何使用数组 [值和文件名] 为第一个文件写入第一个值等
- angular - 从 angular8 发出帖子请求
- rest - 为什么 PostMan Rest Client 给我这个错误?
- python-3.x - Flask 会话的确切类型是什么
- python-3.x - 具有计数行值的新列 - 将元素列为 dict
- python-3.x - PyAutogui.screenshot 抛出 OSError: screen grab failed