背景:总的来说,我是Spark和分布式计算的新手,所以这是一个学习练习,而不是现实生活中的练习.挑战是在没有UDF的情况下确实解决问题.

假设我有以下数据帧:

+------+------+----+--------+---------+----------+
|f_name|s_name|year|district|check_col|true_value|
+------+------+----+--------+---------+----------+
|  John| Smith|1981|     SW8|   s_name|     Smith|
|  Jane| Jones|1980|     L15|   s_name|     Smith|
|  John| Smith|1981|     SW8|     year|      1980|
|  Jane| Jones|1980|     L15|     year|      1980|
+------+------+----+--------+---------+----------+

我想判断名为check_col的列的值是否等于true_value.具体地说,我将添加一个新的布尔列,当(且仅当!)在check_ol中命名的列具有在TRUE_VALUE中指定的值时,该行上的值为True.

在本例中,第一行的值为True,因为check_ol="s_name",该行上s_name列的值为"Smith",等于"true_value"中的值.

我曾希望以下方法能奏效,但没有奏效:

df = df.withColumn(
  "Check",
  df[df["check_col"]] == df["true_value"]
)

我想try 把桌子连在一起会是个好主意,但我找不到解决办法.

推荐答案

Lookup using map type

from itertools import chain

cols = ['f_name', 's_name', 'year', 'district']

# Mapping (k, V) where K is column name and V is correponding value
mapping = F.create_map(*chain(*[(F.lit(c), F.col(c)) for c in cols]))

# lookup the check_col in mapping
df = df.withColumn('check', mapping[F.col('check_col')] == F.col('true_value'))

结果

+------+------+----+--------+---------+----------+-----+
|f_name|s_name|year|district|check_col|true_value|check|
+------+------+----+--------+---------+----------+-----+
|  John| Smith|1981|     SW8|   s_name|     Smith| true|
|  Jane| Jones|1980|     L15|   s_name|     Smith|false|
|  John| Smith|1981|     SW8|     year|      1980|false|
|  Jane| Jones|1980|     L15|     year|      1980| true|
+------+------+----+--------+---------+----------+-----+

Python相关问答推荐

不同数据类型的Python成员变量不会在具有相同优先级的不同线程中更新

try 使用tensorFlow.keras.models时optree Import错误

Django注释:将时差转换为小数或小数

为什么基于条件的过滤会导致pandas中的空数据框架?

Twilio:CallInstance对象没有来自_的属性'

拆分pandas列并创建包含这些拆分值计数的新列

Polars:使用列值引用when / then表达中的其他列

如何调整spaCy token 化器,以便在德国模型中将数字拆分为行末端的点

如何在具有重复数据的pandas中对groupby进行总和,同时保留其他列

删除任何仅包含字符(或不包含其他数字值的邮政编码)的观察

如何使用pytest来查看Python中是否存在class attribution属性?

如何获得每个组的时间戳差异?

在Python中动态计算范围

组/群集按字符串中的子字符串或子字符串中的字符串轮询数据框

ThreadPoolExecutor和单个线程的超时

海上重叠直方图

形状弃用警告与组合多边形和多边形如何解决

字符串合并语法在哪里记录

如何在Python中使用Pandas将R s Tukey s HSD表转换为相关矩阵''

Pandas—堆栈多索引头,但不包括第一列