我有一个Pypark数据框,如下所示:
+---------+--------+-------+------+--------------+-------------+----------+
| NID | Time|N1 |Gender|P1 |M1 |Occupation| and so on...
+---------+--------+-------+------+--------------+-------------+----------+
| 1 | 10 AM | 10 | M| 100 | 50 | Teacher |
| 2 | 2 PM | 20 | M| 200 | 50 | Doctor |
+---------+--------+-------+------+--------------+-------------+----------+
假设nid为2,那么如何从不同的列中添加相应的值,如:
if NID ==2 then N1(20) + P1(200) + M1(50)
result = absolute value (270) =270
我们能不能使它泛化,这样就可以应用于n个列。
提前谢谢!
2条答案
按热度按时间gt0wga4j1#
pyspark:使用when,否则为这个问题设置条件。例子:
df.withColumn("result", when(col("NID") == 2 , col("N1") + col("P1") + col("M1"))).show().
zsohkypk2#
我想可能有几种方法可以做到这一点。
因此,您可以导出基于
NID
然后使用该函数为每条记录生成一个具有正确值的新列。所以这是一种方法。另一种方法是使基函数的长度可变
*args
. 然后,该函数创建一个参数元组,您必须对其进行解析才能使用它,但我认为您不必传递所有必需的列。我喜欢第一种方法,因为它更具可读性。这是第二条路。
另一种选择是将逻辑导出到
withColumn
自称因此有多种方法,但要么函数签名定义要接收的参数数量,要么函数定义处理预设数量的参数,要么
when
函数处理特定的情况和它们各自的参数,因此参数的数量总是在调用函数之前预先确定的。