根据pyspark中另一列的值编辑具有相同id的列的所有行的值

夏贝尔
ID 选择1 val2
1 已标记
1 ñ 已标记
2 ñ 已标记
2 已标记
2 ñ 已标记

我有上表。我想检查 val1 中具有相同 id 的行,如果至少有一个 Y 和一个 N,那么所有具有 1 作为 id 的行都将在 val2 中标记。此外,为了更高效的代码,我希望代码在找到 Y 后跳转到下一个 id。

舒巴姆·夏尔马

假设val1列仅包含唯一值YN您可以将数据框分组id并聚合val1使用countDistinct以计算唯一值,然后创建一个flagged对应于不同计数> 1的条件的新列,最后join这个新列与原始数据框得到结果

from pyspark.sql import functions as F

counts = df.groupBy('id').agg(F.countDistinct('val1').alias('flagged'))
df = df.join(counts.withColumn('flagged', F.col('flagged') > 1), on='id')

如果 columnval1可能包含其他值以及Y, N,则首先屏蔽不在Y和中的值N

vals = F.when(F.col('val1').isin(['Y', 'N']), F.col('val1'))

counts = df.groupBy('id').agg(F.countDistinct(vals).alias('flagged'))
df = df.join(counts.withColumn('flagged', F.col('flagged') > 1), on='id')

>>> df.show()

| id|val1|flagged|
+---+----+-------+
|  1|   Y|   true|
|  1|   N|   true|
|  2|   N|   true|
|  2|   Y|   true|
|  2|   N|   true|
+---+----+-------+

PS:我还稍微修改了您的输出,因为flagged使用布尔值命名的列更有意义

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Pyspark:如何为另一列中具有相同值的所有行设置相同的 id?

在具有相同ID pyspark数据框的另一列中显示不同的值

Pandas - 根据后一列中是否存在值过滤一列中具有相同值和另一列中多个值的行

从表中选择所有行,除了具有相同 id 的另一个表中的行在另一列中具有特定值

删除r中另一列中具有相同ID但值不同的行

删除具有重复的另一列的相同列值的所有行

查找一列中具有相同值而另一列中具有其他值的行?

MySQL 查询一列中具有相同值而另一列中具有不同值的行

选择在一列中具有相同值而在另一列中具有不同值的行

选择具有相同 id 但在另一列中的所有空值的行并按相同的 id 分组

在多行的一列中查找具有相同值的行,而另一列具有不同的值

如何选择具有相同 id 并在另一列中具有所有缺失值的行

一列中具有相同值的行,将另一列中的所有值求和,并显示1行

如何提取与某行相同的一列中具有相同值的所有行?

在另一列中选择具有相同 id 但相同值的行

如何删除另一列中具有特定值的所有 NaN 值的行?

如果某一列包含特定值,则选择具有相同ID的所有行

SQL查询将根据另一列中的值省略具有相同ID的记录

如果另一列在SQL Server中相同,则获取具有最小列值的行

在表的另一列中选择具有相同id但不同值的行

根据Pyspark中另一列的值,有条件地从同一列的另一行值替换一行中的值?

我在熊猫数据框中有两列。一列具有相同的值(id),另一列中具有对应的值的票证数

根据另一列的值提取一列的所有行(SQL 查询)

从 Pandas Dataframe 中选择一列中具有相同值而另一列中仅丢失的行

如何根据没有循环的另一列替换列(数据框)中组的所有相同值?

如何根据即使只有一个重复项在另一列中具有特定值来删除列的所有重复行

查找另一列中具有相同值的行-Python

满足条件时,使列行与另一列的匹配值具有相同的值

根据当前行中另一列的参数,用表达式更新表达式中具有不同值的所有行中的列