У меня есть такой фрейм данных
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
------------------------------
Кто-нибудь может мне с этим помочь? Большое спасибо.
Спасибо за ваш ответ. Нет никакой гарантии, что ответ существует, поэтому для идентификатора, у которого нет ответа, следует игнорировать весь идентификатор. Что касается порядка строки, да, если он исправлен, потому что я уже произвел сортировку по некоторым другим столбцам. Для 0 val гарантируется, что все положительные целые числа должны быть больше 0.
У вас есть логическая реализация на python на фреймворке pandas, я могу попытаться преобразовать эту функцию, чтобы она искрилась
Подтверждено ли, что всегда существует подмножество строк, сумма которых будет точно равна столбцу - sum_needs_to_be? Также исправлен порядок строк. ? И, наконец, что, если в столбце Val есть строки с 0, как и что делать