PySpark:过滤掉列值在datafram中多次出现的行

2024-09-27 07:26:16 发布

您现在位置:Python中文网/ 问答频道 /正文

给定一个有两列的PySpark数据帧,我想把数据集分成两个数据帧:一个ColA和ColB的组合是唯一的,另一个是非唯一的。你知道吗

例如:

ColA | ColB | ColCDoesntMatter
1    | 2    | 4
1    | 3    | 3
2    | 2    | 2
1    | 2    | 6
2    | 2    | 8
2    | 3    | 9

唯一的A/B对是:

1-3
2-3

非唯一A/B对是:

1-2
2-2

因此,一个数据帧将具有唯一AB值的所有行,而另一个数据帧将包含非唯一AB值。ColC对过滤器不重要,但需要保留。如何运行此筛选器?你知道吗

编辑:请注意,我不能使用dropDuplicates,因为它实际上是A和B的组合,需要是唯一的,而不仅仅是A或B


Tags: 数据编辑过滤器abpysparkcolccolbcola
1条回答
网友
1楼 · 发布于 2024-09-27 07:26:16
# count rows per A-B
dfWithRowCount = df.selectExpr("*", "count('*') over (partition by (ColA, ColB)) as nrows")

# filter
uniqueAB = dfWithRowCount.filter(dfWithRowCount.nrows == 1).drop('nrows')
nonUniqueAB = dfWithRowCount.filter(dfWithRowCount.nrows > 1).drop('nrows')

nonUniqueAB.show()
+  +  +  +
|ColA|ColB|ColC|
+  +  +  +
|   2|   2|   2|
|   2|   2|   8|
|   1|   2|   4|
|   1|   2|   6|
+  +  +  +

uniqueAB.show()
+  +  +  +
|ColA|ColB|ColC|
+  +  +  +
|   1|   3|   3|
|   2|   3|   9|
+  +  +  +

相关问题 更多 >

    热门问题