У меня есть такой набор данных:
start_date finish_date
0 2020-06-01 2020-06-02
1 2020-06-02 2020-06-04
2 2020-06-03 NaT
3 2020-06-04 2020-06-07
4 2020-06-05 2020-06-07
5 2020-06-06 NaT
6 2020-06-07 NaT
, который можно воссоздать с помощью следующего кода:
import pandas as pd
df = pd.DataFrame({
'start_date': ['2020-06-01', '2020-06-02', '2020-06-03', '2020-06-04', '2020-06-05', '2020-06-06', '2020-06-07'],
'finish_date': ['2020-06-02', '2020-06-04', pd.NA, '2020-06-07', '2020-06-07', pd.NA, pd.NA],
})
df['start_date'] = df['start_date'].apply(pd.to_datetime)
df['finish_date'] = df['finish_date'].apply(pd.to_datetime)
Вопрос: : как получить количество строк, которые не имеют finish_date
или еще не завершены reporting_date
, следующий ожидаемый результат:
reporting_date not_finished
0 2020-06-01 1
1 2020-06-02 1
2 2020-06-03 2
3 2020-06-04 2
4 2020-06-05 3
5 2020-06-06 4
6 2020-06-07 3
Чтобы объяснить ожидаемый результат выше:
(когда я говорю «строка», я имею в виду строку в наборе данных, а не результат)
- По
reporting_date
2020-06-01
строка 0
началась, но не закончилась, это считается 1
. - По
reporting_date
2020-06-02
строка 0
уже завершена, а строка 1
начата, но еще не завершена, что считается 1
. - По
reporting_date
2020-06-03
, строки 1
и 2
были начаты, но еще не закончены, это считается 2
. - По
reporting_date
2020-06-04
строка 2
имеет уже завершено, а строки 2
и 3
были начаты, но еще не закончены, это считается 2
. - и так далее ..