Частота - ежемесячно / еженедельно / раз в две недели на основе столбца идентификатора и даты - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть несколько миллионов строк данных на уровне дня, как показано ниже:

date        id
2019-01-14  4.000111e+10
2018-02-23  1.501553e+10
2018-01-19  4.000213e+10
2020-01-17  4.006799e+10
2020-02-28  1.000328e+10

Я пытаюсь построить сводную таблицу для моего столбца 'id', используя даты, а затем получить частоту дат для каждого месяца на основе моего идентификатора.

table = df.pivot_table(index='id', columns='date', aggfunc=len)

Из этого мне нужно выяснить, какой идентификатор имеет еженедельные / раз в две недели / ежемесячные записи. По сути, если я выбираю еженедельно, мне нужно получить эти идентификаторы на основе месяца, в котором была только одна транзакция за этот месяц.

jan_filter = df['date'].map(lambda x: x.month) == 1
df_jan = df[jan_filter]

На основании этого я могу выбрать те идентификаторы, у которых была транзакция только один раз в этом месяце. Но как я могу добиться того же для двухнедельных - имеет 1 транзакцию каждые две недели / еженедельно - одну транзакцию каждую неделю месяца

Редактировать:

Ожидаемый результат:

Ежемесячно (идентификатор вводится только один раз в месяц):

date           id
2019-01-14     40192137123
2019-01-17     12321904367
2019-01-04     71231231238

Еженедельно (Идентификатор вводится не реже одного раза в неделю в месяце):

date           id
2019-01-14     40192137123
2019-01-05     40192137123
2019-01-19     40192137123
2019-01-26     40192137123
2019-01-17     12321904367
2019-01-04     12321904367
2019-01-24     12321904367
2019-01-31     12321904367

Раз в две недели (у идентификатора есть хотя бы одна запись в каждую две недели)

2-е редактирование: Расчет недели за месяц

Я рассчитываю неделю месяца, используя этот метод.

...