Примерный фрейм данных:
id start1 end1 start2 end2
0 Bob 2018-11-29 2018-11-30 2018-12-01 2018-12-31
1 James 2018-10-19 2018-10-31 NaT NaT
2 Jane 2018-04-05 2018-07-12 2018-11-29 2018-11-30
Учитывая приведенный выше примерный фрейм данных, я хотел бы показать счетчик частоты по месяцам и годам.Предположим, что в эти периоды каждый человек (id
) чем-то «подвергался воздействию».Для каждого человека может быть до двух периодов времени (всегда будет хотя бы один период времени (т. Е. start1
и end1
), но может быть или не быть второго (т. Е. start2
и * 1008).*)).Я хочу показать, сколько людей было затронуто месяцем и годом за весь период времени, в течение которого кто-либо был затронут.
Например, приведенные выше данные приведут к чему-то вроде этого (не уверен, что год-месяц будетодин и тот же столбец или несколько - все, что работает):
year-month count
0 2018-04 1
1 2018-05 1
2 2018-06 1
3 2018-07 1
4 2018-08 0
5 2018-09 0
6 2018-10 1
7 2018-11 2
8 2018-12 1
Моя конечная цель - рассмотреть их в разные периоды времени (например, год (все данные представлены в 2018 году в данных этого примера), месяц / год,неделю и т. д.).
Я не уверен, как распаковать их в одну серию, чтобы я мог сделать гистограмму в одном столбце.Я знаю, что когда они у меня есть в одном столбце (например, date
), я могу сделать что-то вроде:
df.groupby(df["date"].dt.month).count().plot(kind="bar")
Но это будет только по месяцам, и предполагается, что у меня уже есть даты водин столбец.
Я мог бы просто использовать datetime
и продолжать добавлять дни в цикле, если это происходит между каждым таймфреймом, пока я не достигну конечной даты, но каждый раз, когда я делаю что-то подобное, я узнаю, что панды/ Numpy имеет лучший способ. Я ищу такой лучший способ.