Фильтрация по фрейму данных на основе столбцов, определенных в списке - PullRequest
0 голосов
/ 24 апреля 2018

У меня есть фрейм данных - 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, так что он должен обрабатываться автоматически.Каков наилучший способ добиться этого?

1 Ответ

0 голосов
/ 25 апреля 2018

Предположим, у вас есть следующие 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)

Для приведенного выше кадра данных будет выводиться только вторая строка.

+----------+----+----+-------+-------+
|Week      |Dim1|Dim2|T1_diff|T2_diff|
+----------+----+----+-------+-------+
|2016-04-30|14  |FR  |90     |4      |
+----------+----+----+-------+-------+

Если у вас есть другой столбец, скажем T3_diff, вы можете добавить его к List, и он будет добавлен к условию фильтра.

...