Ako aktualizovať stĺpec dynamicky sa o ďalšie stĺpce na základe hodnôt bunky iného stĺpca

0

Otázka

Musíme aktualizovať stĺpci A , buď stĺpci B alebo stĺpec C alebo stĺpec D . Ktorý stĺpec je možné použiť, budú rozhodnuté v stĺpci X, ktorá obsahuje bunky hodnoty ako "stĺpec B" alebo "stĺpec " C" alebo "v stĺpci D"

Toto je potrebné v pyspark dataframes

apache-spark-sql pyspark python-3.x
2021-11-23 15:00:21
1

Najlepšiu odpoveď

0

Môžete použiť when na dosiahnutie tohto cieľa.

Variabilný possible_values vo vnútri derive_column_A() ovláda všetky možné hodnoty stĺpca. Z tohto sme dynamicky vytvoriť podmienky zvoliť vhodné stĺpci.

Príklad


from pyspark.sql import functions as F

data = [("B1", "C1", "D1", "column C"),
        ("B2", "C2", "D2", "column D"), 
        ("B3", "C3", "D3", "column B"), 
        ("B4", "C4", "D4", "column D")]

df = spark.createDataFrame(data, ("B", "C", "D", "X"))

def derive_column_A():
    possible_values = ["column B", "column C", "column D"]
    column_mapping = [{col, col.split(" ")[1]} for col in possible_values]
    condition = F
    for possible_value in possible_values:
        condition = condition.when(F.col("X") == possible_value, F.col(possible_value.split(" ")[1]))
    return condition


df.withColumn("A", derive_column_A()).show()

Výstup

+---+---+---+--------+---+
|  B|  C|  D|       X|  A|
+---+---+---+--------+---+
| B1| C1| D1|column C| C1|
| B2| C2| D2|column D| D2|
| B3| C3| D3|column B| B3|
| B4| C4| D4|column D| D4|
+---+---+---+--------+---+
2021-11-23 15:48:59

V iných jazykoch

Táto stránka je v iných jazykoch

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................