我有一个数据框 - DF
+----------+----+----+-------+-------+
| WEEK|DIM1|DIM2|T1_diff|T2_diff|
+----------+----+----+-------+-------+
|2016-04-02| 14|NULL| -5| 60|
|2016-04-30| 14| FR| 90| 4|
+----------+----+----+-------+-------+
我已将列表定义为targetList
List(T1_diff, T2_diff)
我想过滤掉T1_diff和T2_diff大于3的数据帧中的所有行。在这种情况下,输出应该只包含第二行,因为第一行包含-5作为T1_Diff。 targetList可以包含更多列,目前它有T1_diff,T2_diff,如果有另一个名为T3_diff的列,那么应该自动处理。 实现这一目标的最佳方法是什么?
答案 0 :(得分:0)
假设您有以下List
个列要过滤掉大于3的值。
val lst = List("T1_diff", "T2_diff")
然后,您可以使用这些列名创建String
,然后将String
传递给where
函数。
val condition = lst.map(c => s"$c>3").mkString(" AND ")
df.where(condition).show(false)
对于上面的Dataframe,它只会输出第二行。
+----------+----+----+-------+-------+
|Week |Dim1|Dim2|T1_diff|T2_diff|
+----------+----+----+-------+-------+
|2016-04-30|14 |FR |90 |4 |
+----------+----+----+-------+-------+
如果您有其他专栏说T3_diff
,则可以将其添加到List
,并将其添加到过滤条件中。