Фильтрация элементов массива в зависимости от условия суммы pySpark

У меня есть такой фрейм данных

id  |  val  |  sum_needs_to_be
------------------------------
1   |   1   |  3
------------------------------
1   |   2   |  3
------------------------------
1   |   1   |  3
------------------------------
2   |   3   |  2
------------------------------
2   |   1   |  2
------------------------------
2   |   1   |  2
------------------------------

У него есть несколько идентификаторов, для каждого идентификатора мы получаем несколько записей вместе с одной sum_needs_to_be, которая является условием фильтрации для суммы vals, которая должна быть. Например, для id1 задана сумма как 3, значение 1-й и 2-й записи, 1 + 2 = 3, тогда 1-я и 2-я строки остаются, а 3-я запись игнорируется; id2 имеет цель в сумме 2, поэтому необходимы 5-я и 6-я записи, а 4-я игнорируется. Поскольку для одного идентификатора у него может быть несколько решений, требуется только первое решение сверху вниз (всегда, если возможно, сначала берите наименьшую запись индекса, если индекс 1,5 действителен, а индекс 2,3,4 также действителен, выберите 1,5, потому что 1 - самый маленький).

Результат должен быть похож на

id  |  val  |  sum_needs_to_be
------------------------------
1   |   1   |  3
------------------------------
1   |   2   |  3
------------------------------
2   |   1   |  2
------------------------------
2   |   1   |  2
------------------------------

Кто-нибудь может мне с этим помочь? Большое спасибо.

Подтверждено ли, что всегда существует подмножество строк, сумма которых будет точно равна столбцу - sum_needs_to_be? Также исправлен порядок строк. ? И, наконец, что, если в столбце Val есть строки с 0, как и что делать

Aditya Vikram Singh 01.04.2021 22:16

Спасибо за ваш ответ. Нет никакой гарантии, что ответ существует, поэтому для идентификатора, у которого нет ответа, следует игнорировать весь идентификатор. Что касается порядка строки, да, если он исправлен, потому что я уже произвел сортировку по некоторым другим столбцам. Для 0 val гарантируется, что все положительные целые числа должны быть больше 0.

Gao 03.04.2021 09:02

У вас есть логическая реализация на python на фреймворке pandas, я могу попытаться преобразовать эту функцию, чтобы она искрилась

Aditya Vikram Singh 06.04.2021 13:43
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
3
38
0

Другие вопросы по теме