python - Pandas - 最近 x 天的值的计数频率
问题描述
我发现了一些意想不到的结果。我想要做的是创建一个查看 ID 号和日期的列,并计算过去 7 天内该 ID 号出现的次数(我还想将这个动态设置为 x 数量天,但只是尝试 7 天)。
所以给定这个数据框:
import pandas as pd
df = pd.DataFrame(
[['A', '2020-02-02 20:31:00'],
['A', '2020-02-03 00:52:00'],
['A', '2020-02-07 23:45:00'],
['A', '2020-02-08 13:19:00'],
['A', '2020-02-18 13:16:00'],
['A', '2020-02-27 12:16:00'],
['A', '2020-02-28 12:16:00'],
['B', '2020-02-07 18:57:00'],
['B', '2020-02-07 21:50:00'],
['B', '2020-02-12 19:03:00'],
['C', '2020-02-01 13:50:00'],
['C', '2020-02-11 15:50:00'],
['C', '2020-02-21 10:50:00']],
columns = ['ID', 'Date'])
计算每个实例在过去 7 天内发生的代码:
df['Date'] = pd.to_datetime(df['Date'])
delta = 7
df['count_in_last_%s_days' %(delta)] = df.groupby(['ID', pd.Grouper(freq='%sD' %delta, key='Date')]).cumcount()
输出:
ID Date count_in_last_7_days
0 A 2020-02-02 20:31:00 0
1 A 2020-02-03 00:52:00 1
2 A 2020-02-07 23:45:00 2
3 A 2020-02-08 13:19:00 0 #<---- This should output 3
4 A 2020-02-18 13:16:00 0
5 A 2020-02-27 12:16:00 0
6 A 2020-02-28 12:16:00 1
7 B 2020-02-07 18:57:00 0
8 B 2020-02-07 21:50:00 1
9 B 2020-02-12 19:03:00 0 #<---- THIS SHOULD OUTPUT 2
10 C 2020-02-01 13:50:00 0
11 C 2020-02-11 15:50:00 0
12 C 2020-02-21 10:50:00 0
解决方案
您不想使用Grouper
onDate
而是使用rolling
window。分组器将数据帧分段为所需持续时间的单独连续块。由于您希望从每个日期开始 7 天,因此这是以下工作rolling
:
delta = 7
df['count_in_last_%s_days' %(delta)] = df.assign(count=1).groupby(
['ID']).apply(lambda x: x.rolling('%sD' %delta, on='Date').sum(
))['count'].astype(int) - 1
它按预期给出:
ID Date count_in_last_7_days
0 A 2020-02-02 20:31:00 0
1 A 2020-02-03 00:52:00 1
2 A 2020-02-07 23:45:00 2
3 A 2020-02-08 13:19:00 3
4 A 2020-02-18 13:16:00 0
5 A 2020-02-27 12:16:00 0
6 A 2020-02-28 12:16:00 1
7 B 2020-02-07 18:57:00 0
8 B 2020-02-07 21:50:00 1
9 B 2020-02-12 19:03:00 2
10 C 2020-02-01 13:50:00 0
11 C 2020-02-11 15:50:00 0
12 C 2020-02-21 10:50:00 0
推荐阅读
- javascript - 加载 DOM 之前的 Chrome 扩展 + jQuery(使用 ajax 加载外部内容)
- linux - 为什么每次迭代时最后一个输入数字都输入堆栈?
- quartz-scheduler - 如何将作业计划数据保存在 Quartz Scheduler 的数据库中
- javascript - 如何通过url从第一页到第二页将“id”作为路径变量传递并分配给变量
- javascript - 如何通过使用 Object.create() 在 JavaScript 中使用递归来深度复制对象?
- rabbitmq - php-amqplib:如何获取预取缓存中的消息数?
- python - 如何将熊猫数据透视表中的值操作为行?
- python - Pytorch nn.LSTM中如何使用python实现_VF.lstm
- java - Java:如何优化堆分配和垃圾收集?
- javascript - OPC-UA从客户端启动后如何动态添加新变量