У меня есть панда DF:
df = pd.DataFrame(np.random.randint(1,10,size=(6,2)),columns = list("AB"))
df["A"] = ["1111","2222","1111","1111","2222","1111"]
df["B"] = ["2001-01-10","2001-01-02","2001-02-11","2001-03-14","2001-02-01","2001-04-14"]
df
OP:
A B
0 1111 2001-01-10
1 2222 2001-01-02
2 1111 2001-02-11
3 1111 2001-03-14
4 2222 2001-02-01
5 1111 2001-04-14
Я пытаюсь создать новый столбец ->
max(difference in (month,day) of transaction for every user)
Например, для пользователя "1111" разные (месяц, день) транзакции:
[('01','10'),('02','11'),('03','14'),('04','14')]
и разница составляет
[1,3,0] => max(diff) = 3
потому что первая транзакция - 10 января, а следующая - 11 февраля (11 - 10 => 1), а затем 2 транзакции - 14 марта и апреля (14 -11 => 3) и (14- 14 => 0).
Ожидаемый ОП:
A Max_diff
1111 3
Код:
df.groupby("A",as_index=False).apply(lambda x: list(map(lambda d: (d.split("-")[1],d.split("-")[2]),x["B"])))
OP:
0 [(01, 01), (02, 02), (03, 03), (04, 03)]
1 [(01, 02), (02, 01)]
dtype: object
Я повторяю это, чтобы найти макс. Это займет много времени, если я попробую это на огромном наборе данных. Любой другой обходной путь для достижения этого ожидаемого ОП.