У меня есть несколько миллионов строк данных на уровне дня, как показано ниже:
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-е редактирование: Расчет недели за месяц
Я рассчитываю неделю месяца, используя этот метод.