Условная сумма после группы, где я должен соответствовать условию в предыдущих строках - PullRequest
0 голосов
/ 11 июня 2018

Здравствуйте, у меня есть следующая таблица

id       | start_date | end_date   | state
52183371 | 2015-03-31 | 2015-03-31 | working
52183371 | 2015-04-01 | 2015-04-31 | working
52183371 | 2015-04-02 | 2015-04-28 | working
52183371 | 2015-04-21 | 2015-04-30 | not_working

В этой таблице я хочу подсчитать номер рабочего состояния, в котором дата начала текущей строки больше, чем end_date всей приватной строки

Результат Iхочу увидеть следующее:

id       | start_date | end_date   | state      | working_count
52183371 | 2015-03-31 | 2015-03-31 | working    | NaN
52183371 | 2015-04-01 | 2015-04-31 | working    | 1
52183371 | 2015-04-02 | 2015-04-28 | working    | 1
52183371 | 2015-04-21 | 2015-04-30 | not_working| 1

В последних строках, поскольку start_date ниже, чем предыдущая end_date, поэтому я не хочу считать это.

В настоящее время я думаю об использовании циклагде я использую start_date, а затем перебираю эти уникальные даты начала, а затем использую эти даты начала, чтобы отфильтровать данные и затем выполнить расчет.Однако есть ли способ сделать это у панд?

1 Ответ

0 голосов
/ 11 июня 2018

Если я хорошо понимаю вашу проблему, вы хотите проверить end_date всех предыдущих строк.Я думаю, что один из способов - получить max в столбце end_date до текущей строки, используя cummax.Поэтому, если вы сделаете:

(df.start_date > df.end_date.cummax().shift()).cumsum()

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...