我在试着计算过去7天的事件重现率。事件由从我的银行帐户中扣除的特定金额来定义(参见下面的数据示例)。我试过使用各种工具,如滚动、groupby、重采样等,但无法将它们集成到工作解决方案中。我遇到的两个主要问题:
有什么想法吗?我也非常感谢你的解释。谢谢你!!
date description amount desired column (amount count in the last 7 days)
9/5/2019 asdkfjlskd 500 1
9/6/2019 dfoais 1200 1
9/7/2019 sadlfuhasd\ -12.99 1
9/8/2019 sdaf 500 2
9/9/2019 sdaf -267.01 1
9/10/2019 sdaf -39.11 1
9/11/2019 sdaf -18 1
9/11/2019 sdaf 500 3
9/13/2019 sdaf 500 1
9/14/2019 sdaf -450 1
9/15/2019 sdaf -140 1
9/16/2019 sdaf -6.8 1发布于 2020-05-12 04:24:42
在熊猫中,正确的方法是使用群滚动,滚动窗口等于7天('7D'),如下所示:
df["date"] = pd.to_datetime(df.date)
df.set_index("date").groupby("amount").rolling("7D").count()这导致:
amount date
-450.00 2019-09-14 1.0
-267.01 2019-09-09 1.0
-140.00 2019-09-15 1.0
-39.11 2019-09-10 1.0
-18.00 2019-09-11 1.0
-12.99 2019-09-07 1.0
-6.80 2019-09-16 1.0
500.00 2019-09-05 1.0
2019-09-08 2.0
2019-09-11 3.0
2019-09-13 3.0
1200.00 2019-09-06 1.0请注意,此时间框架中的日期与7天期间的结束有关.也就是说,在2019-09-13截止的7天内,你有3笔500笔交易.
如果您想要将其“扁平化”回每个事务的一行:
tx_count = df.set_index("date").groupby("amount").rolling("7D").count()
tx_count.columns=["similar_tx_count_prev_7_days"]
tx_count = tx_count.reset_index()
tx_count在以下方面的成果:
amount date similar_tx_count_prev_7_days
0 -450.00 2019-09-14 1.0
1 -267.01 2019-09-09 1.0
2 -140.00 2019-09-15 1.0
3 -39.11 2019-09-10 1.0
4 -18.00 2019-09-11 1.0发布于 2020-05-13 03:38:19
我最终使用了以下方法。效率不高吗?
df3['test']=df3.apply(lambda x : df3[(df3['amount']== x.amount) & (df3['date'] < x.date ) & (df3['date'] >= (x.date-pd.DateOffset(days=7)))]['date'].count(), axis=1)https://stackoverflow.com/questions/61743170
复制相似问题