You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于列表指定列过滤DataFrame(多列值均大于阈值)

解决方案:过滤指定列全部大于3的行

这需求其实很直观——就是要确保targetList里的每一列值都满足大于3的条件,我们可以通过动态生成过滤条件再合并的方式实现,不管列表里有多少列都能通用。

Scala 实现

假设你用的是Scala版本的Spark,代码如下:

import org.apache.spark.sql.functions.col

// 基于已定义的targetList生成所有列的过滤条件,并合并为逻辑与
val filterConditions = targetList.map(col(_) > 3).reduce(_ && _)
// 应用过滤条件得到结果DataFrame
val filteredDf = df.filter(filterConditions)

逻辑说明:

  • 先用map遍历targetList,把每个列名转换成列 > 3的布尔条件
  • 再用reduce把所有条件用&&(逻辑与)合并,相当于所有条件必须同时满足
  • 最后用filter方法过滤DataFrame

Python 实现

如果是Python版本的Spark,写法类似,注意需要导入functools.reduce来合并条件:

from functools import reduce
from pyspark.sql.functions import col

# 生成每一列的过滤条件列表
filter_conditions = [col(c) > 3 for c in targetList]
# 合并所有条件为逻辑与,然后过滤
filtered_df = df.filter(reduce(lambda cond1, cond2: cond1 & cond2, filter_conditions))

效果验证

针对你给出的示例DataFrame,运行代码后,只有第二行(WEEK=2016-04-30)会被保留,因为它的T1_diff=90和T2_diff=4都大于3,完全符合要求。

内容的提问来源于stack exchange,提问作者White Shadows

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:31:50