如何根据另一列的单元格值由其他列动态更新A列

Posted

技术标签:

【中文标题】如何根据另一列的单元格值由其他列动态更新A列【英文标题】:how to update column A dynamically by other columns based on cell values of another column 【发布时间】:2021-11-23 15:00:21 【问题描述】:

我们需要通过 B 列或 C 列或 D 列更新 A 列。使用哪一列将由 X 列决定,其中包含“B 列”或“C 列”或“D 列”的单元格值

这在 pyspark 数据帧中是必需的

【问题讨论】:

请提供输入数据集和所需输出的示例。阅读:How to create a Minimal, Reproducible Example 【参考方案1】:

您可以使用when 来实现此目的。

derive_column_A() 内的变量 possible_values 控制所有可能的列值。由此我们动态地构造一个条件来选择合适的列。

示例


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()

输出

+---+---+---+--------+---+
|  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|
+---+---+---+--------+---+

【讨论】:

以上是关于如何根据另一列的单元格值由其他列动态更新A列的主要内容,如果未能解决你的问题,请参考以下文章

如何参考r中另一列中的另一个单元格值更改列中的单元格值?

根据同一行中其他单元格的 SUM 设置单元格值

根据MySQL中另一列分组的另一列的顺序更新列

jquery实现的统计table表格指定列的单元格值的和

根据另一列的另一个值和/或另一行中的同一列更新设置值:-ORA 1427

根据由另一列分组的不同列的最大值获取值[重复]