Найти pre / post-decessor в pandas для каждой группы

#python #pandas

#python #pandas

Вопрос:

Чтобы уменьшить сложность, я переработал весь пост:

Итак, чего я хочу добиться: для списка кампаний с заданными датами начала и окончания я хочу вернуть предыдущую кампанию. Предыдущая означает, что кампания начинается после дня окончания предыдущей. Однако, если есть несколько предыдущих кампаний, я хочу вернуть кампанию с тем же типом. Это должно быть сделано для каждой кампании, которая у меня есть (как правило, у меня будут сгруппированные данные (подумайте о парах элементов / кампаний, где в одной кампании есть несколько элементов, и меня интересует предыдущая кампания для одного элемента)

Рассмотрим следующие данные

 Campaign | StartDay | EndDay | Type
---------|----------|--------|------
    1    |    1     |   10   |  1
    2    |    5     |   15   |  1
    3    |    7     |   15   |  2
    4    |   11     |   20   |  1
    5    |   16     |   25   |  2
  

Итак, в этом случае желаемый результат выглядит следующим образом

 Campaign | PreviousCampaign
---------|-----------------
    1    |     NAN
    2    |     NAN
    3    |     NAN
    4    |      1
    5    |      3
  

Если первые записи исчезают, все в порядке. Обратите внимание, что предшественник 5 равен 3 из-за условия типа.

Я могу сделать это, объединив таблицу с помощью campaign, запросив правильные строки и несколько шагов, чтобы убедиться, что тип costraint удовлетворен. Без ограничения типа type это немного проще.

Однако, изучая «современные панды» тома Аугспургера, у меня такое чувство, что поворот, укладка, плавление или комбинация должны работать. Но я еще не понял, как это сделать.

Комментарии:

1. Можете ли вы показать желаемый результат?

2. обновил его и немного изменил пример для элемента 2

3. Желаемый результат помогает, но по-прежнему сложно следовать желаемой логике. Является ли «эталонная кампания» тем, что вы хотите в столбце «NextCampaign»? Это может быть понятнее, если вы можете объяснить, почему вы хотите это сделать.

4. эй, я переписал и сократил пример. Я надеюсь, что теперь он больше сосредоточен на основных частях

5. Намного понятнее. Но что должно произойти, если есть две предыдущие кампании с тем же типом?