dataframe - 确定 pyspark DataFrame 行值是否存在于其他列中
问题描述
我正在使用 pyspark 中的数据框,如果数据框的其他列中存在值,则需要逐行评估。例如,给定这个数据框:
东风:
+---------+--------------+-------+-------+-------+
|Subject |SubjectTotal |TypeA |TypeB |TypeC |
+---------+--------------+-------+-------+-------+
|Subject1 |10 |5 |3 |2 |
+---------+--------------+-------+-------+-------+
|Subject2 |15 |0 |15 |0 |
+---------+--------------+-------+-------+-------+
|Subject3 |5 |0 |0 |5 |
+---------+--------------+-------+-------+-------+
作为输出,我需要确定哪个 Type 具有 100% 的SubjectTotal
. 所以我的输出看起来像这样:
df_output:
+---------+--------------+
|Subject |Type |
+---------+--------------+
|Subject2 |TypeB |
+---------+--------------+
|Subject3 |TypeC |
+---------+--------------+
甚至可能吗?
谢谢!
解决方案
哟可以尝试在 SQL 中使用when().otherwise()
PySpark SQL 函数或case
语句
import pyspark.sql.functions as F
df = spark.createDataFrame(
[
("Subject1", 10, 5, 3, 2),
("Subject2", 15, 0, 15, 0),
("Subject3", 5, 0, 0, 5)
],
("subject", "subjectTotal", "TypeA", "TypeB", "TypeC"))
df.show()
+--------+------------+-----+-----+-----+
| subject|subjectTotal|TypeA|TypeB|TypeC|
+--------+------------+-----+-----+-----+
|Subject1| 10| 5| 3| 2|
|Subject2| 15| 0| 15| 0|
|Subject3| 5| 0| 0| 5|
+--------+------------+-----+-----+-----+
df.withColumn("Type", F.
when(F.col("subjectTotal") == F.col("TypeA"), "TypeA").
when(F.col("subjectTotal") == F.col("TypeB"), "TypeB").
when(F.col("subjectTotal") == F.col("TypeC"), "TypeC").
otherwise(None)).show()
+--------+------------+-----+-----+-----+-----+
| subject|subjectTotal|TypeA|TypeB|TypeC| Type|
+--------+------------+-----+-----+-----+-----+
|Subject1| 10| 5| 3| 2| null|
|Subject2| 15| 0| 15| 0|TypeB|
|Subject3| 5| 0| 0| 5|TypeC|
+--------+------------+-----+-----+-----+-----+
推荐阅读
- c++ - C++ 向量 Lower_bound 函数没有像我想的那样工作
- python - Docker + Google Cloud + chromedriver -> 可执行文件需要在 PATH 中
- java - 使用 Java + Linux 在 Cloud Run 上加载 OpenCV 库
- javascript - 我正在尝试创建一个 discord.js 命令,该命令从 json 文件中获取一行,然后将其发送到用户 DM
- java - 如何修复“数据未保存”?
- typescript - 如何用一种具体类型和一种推断类型定义泛型函数
- excel - 如何修复将数据从一个工作簿复制到另一个工作簿的宏
- java - VSCode 无法导入外部库
- android - 如何解决在 Android 上通过 Firefox 打开 PDF 的问题?
- html - 如何让我的弹性内容停止换行?