pandas - 统计过去 7 天内的类似事件
问题描述
我正在尝试计算过去 7 天的事件重复率。事件由从我的银行帐户中扣除的特定金额定义(参见下面的数据框示例)。我尝试使用各种工具,例如滚动、groupby、resample 等,但无法将它们集成到工作解决方案中。我遇到的2个主要问题:
- 仅当金额相等时,我才需要执行 rolling.count()
- 我需要一个完整的 7 天窗口而不是 7 行窗口(有些日子没有交易)
有任何想法吗?我也非常感谢您的解释。谢谢!!
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
解决方案
在 pandas 中执行此操作的正确方法是使用 groupby-rolling,滚动窗口等于 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 年 9 月 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
推荐阅读
- java - 处理 - 构造函数 ArrayList
(类)不存在 - r - XBRL R 包读取添加另一个链接到输入链接。导致无法打开的链接
- spring-boot - 使用 Consul 和 Spring Cloud Consul 的多集群 Kubernetes 服务发现
- node.js - Node.js:fs unlink vs. fs-extra remove 删除文件。什么时候选择哪一个,为什么?
- flutter - 尝试创建自定义构建器会导致非唯一输出错误
- c - 我如何将'0xA5'的值设置为我的字符串“Now the Message is:”的前5个字节?
- c# - Loggly 和内部异常
- python - 根据索引和列之间的匹配,有选择地将数据帧的元素相乘以获取数字
- mysql - Mysql按列分组并仅获取第三列最大值的行
- python - 如何增量更改文件中的字符串?