首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >统计前7天发生的类似事件。

统计前7天发生的类似事件。
EN

Stack Overflow用户
提问于 2020-05-12 03:14:37
回答 2查看 343关注 0票数 0

我在试着计算过去7天的事件重现率。事件由从我的银行帐户中扣除的特定金额来定义(参见下面的数据示例)。我试过使用各种工具,如滚动、groupby、重采样等,但无法将它们集成到工作解决方案中。我遇到的两个主要问题:

  1. 我需要执行rolling.count(),只有当金额等于
  2. 时,我需要一个完整的7天窗口,而不是7行窗口(有时没有事务),

有什么想法吗?我也非常感谢你的解释。谢谢你!!

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

发布于 2020-05-12 04:24:42

在熊猫中,正确的方法是使用群滚动,滚动窗口等于7天('7D'),如下所示:

代码语言:javascript
复制
df["date"] = pd.to_datetime(df.date)
df.set_index("date").groupby("amount").rolling("7D").count()

这导致:

代码语言:javascript
复制
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笔交易.

如果您想要将其“扁平化”回每个事务的一行:

代码语言:javascript
复制
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

在以下方面的成果:

代码语言:javascript
复制
         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
票数 1
EN

Stack Overflow用户

发布于 2020-05-13 03:38:19

我最终使用了以下方法。效率不高吗?

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61743170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档