首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据pyspark中的条件从dataframe中删除行

根据pyspark中的条件从dataframe中删除行
EN

Stack Overflow用户
提问于 2018-09-19 07:43:49
回答 4查看 51.7K关注 0票数 12

我有一个包含两列的数据帧:

代码语言:javascript
运行
复制
+--------+-----+
|    col1| col2|
+--------+-----+
|22      | 12.2|
|1       |  2.1|
|5       | 52.1|
|2       | 62.9|
|77      | 33.3|

我想创建一个新的dataframe,它将只接受以下行

“col1的值”>“col2的值”

请注意,col1具有long类型,而col2具有double类型

结果应该是这样的:

代码语言:javascript
运行
复制
+--------+----+
|    col1|col2|
+--------+----+
|22      |12.2|
|77      |33.3|
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-09-19 16:06:10

另一种可能的方法是使用DF的where函数。

例如:

代码语言:javascript
运行
复制
val output = df.where("col1>col2")

代码语言:javascript
运行
复制
+----+----+
|col1|col2|
+----+----+
|  22|12.2|
|  77|33.3|
+----+----+
票数 7
EN

Stack Overflow用户

发布于 2018-09-19 21:21:43

我认为最好的方法是简单地使用"filter“。

代码语言:javascript
运行
复制
df_filtered=df.filter(df.col1>df.col2)
df_filtered.show()

+--------+----+
|    col1|col2|
+--------+----+
|22      |12.2|
|77      |33.3|
票数 18
EN

Stack Overflow用户

发布于 2021-04-14 03:29:15

根据条件保留行的最好方法是使用filter,正如其他人提到的那样。

要回答标题中所述的问题,根据条件删除行的一种选择是在left_anti中使用Pyspark join。例如,要使用col1>col2删除所有行,请使用:

代码语言:javascript
运行
复制
rows_to_delete = df.filter(df.col1>df.col2)

df_with_rows_deleted = df.join(rows_to_delete, on=[key_column], how='left_anti')
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52395986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档