我有一个 PySpark df:
+---+---+---+---+---+---+---+---+
| id| a1| b1| c1| d1| e1| f1|ref|
+---+---+---+---+---+---+---+---+
| 0| 1| 23| 4| 8| 9| 5| b1|
| 1| 2| 43| 8| 10| 20| 43| e1|
| 2| 3| 15| 0| 1| 23| 7| b1|
| 3| 4| 2| 6| 11| 5| 8| d1|
| 4| 5| 6| 7| 2| 8| 1| f1|
+---+---+---+---+---+---+---+---+
Run Code Online (Sandbox Code Playgroud)
我最终想创建另一列“out”,其值基于“ref”列。例如,在第一行 ref 列中有 b1 作为值。在“out”列中,我希望看到“b1”列的值,即 23。这是预期的输出:
+---+---+---+---+---+---+---+---+---+
| id| a1| b1| c1| d1| e1| f1|ref|out|
+---+---+---+---+---+---+---+---+---+
| 0| 1| 23| 4| …Run Code Online (Sandbox Code Playgroud) apache-spark apache-spark-sql pyspark pyspark-sql apache-spark-1.6
我想根据数据框中现有的列子集创建一个新列(v5)。
示例数据框:
+---+---+---+---+
| v1| v2| v3| v4|
+---+---+---+---+
| 2| 4|7.0|4.0|
| 99| 0|2.0|0.0|
|189| 0|2.4|0.0|
+---+---+---+---+
Run Code Online (Sandbox Code Playgroud)
提供示例数据框的另一个视图:
+---+---+---+---+
| v1| v3| v2| v4|
+---+---+---+---+
| 2|7.0| 4|4.0|
| 99|2.0| 0|0.0|
|189|2.4| 0|0.0|
+---+---+---+---+
Run Code Online (Sandbox Code Playgroud)
它的创建者:
+---+---+---+---+
| v1| v2| v3| v4|
+---+---+---+---+
| 2| 4|7.0|4.0|
| 99| 0|2.0|0.0|
|189| 0|2.4|0.0|
+---+---+---+---+
Run Code Online (Sandbox Code Playgroud)
最终,我想做的是创建另一个列 v5,它是与 v1 和 v2 的最小值相对应的值,忽略任一列中存在的零和空值。假设 v1 为键,v3 为值对。同样,v2 为键,v4 为值。例如,在第一行中:在 v1 和 v2 中,最小值属于 v1,即 2,因此 v5 列中的输出应为 7.0 同样,在第二行中:忽略 v1 和 v2 的零值和空值,输出应为成为2.0
原始数据帧有五列作为键,相应的五列作为值所需的输出:
+---+---+---+---+---+
| …Run Code Online (Sandbox Code Playgroud)