python - 如何计算两个日期之间的事件总和
问题描述
我有一个 DataFrame,我需要在其中计算每个人两个日期之间的事件数。
在下面的 DataFrame 中,对于每个 A 类日期,我需要计算每个人在上一个 A 类日期之前的 B 类日期数。每个人有多少个 A 型和 B 型日期没有限制。
我想避免 for 循环,因为它们很慢。
数据框
Person Date Type
1 01/01/19 A
1 01/05/19 B
1 02/01/19 A
1 03/01/19 A
2 01/01/19 A
2 01/07/19 B
2 01/25/19 B
2 02/01/19 A
2 02/05/19 B
2 04/01/19 A
3 03/01/19 A
3 04/01/19 A
期望的输出
Person Date Count
1 2/1/19 1
1 3/1/19 0
2 2/2/19 2
2 4/1/19 1
3 4/1/19 0
解决方案
感谢 molybdenum42 的洞察力。我不知道差异。这让我对在类型 A 上过滤的索引上使用 diff 有了一个想法。我不知道如何在索引本身上执行此操作,所以我将它复制到另一列。数据框已经按人员和日期排序,但我将其包含在下面的代码中。
d = {"Person":[1,1,1,1,2,2,2,2,2,2,3,3],
"Date":["01/01/19", "01/05/19", "02/01/19", "03/01/19", "01/01/19", "01/07/19", "01/25/19",
"02/01/19", "02/05/19", "04/01/19", "03/01/19", "04/01/19"],
"Type":["A", "B", "A", "A", "A", "B", "B", "A", "B", "A", "A", "A"]}
df = pd.DataFrame(d)
df.Date = pd.to_datetime(df.Date)
df_sorted = df.sort_values(by=['Person', 'Date'])
df_sorted.reset_index(drop=True, inplace=True)
df_sorted['_index'] = df_sorted.index.values
group_a = df_sorted[df_sorted.Type == 'A'].groupby('Person')
df_sorted['Count'] = group_a['_index'].diff()-1
df_sorted[df_sorted.Count.notna()]
Person Date Type _index Count
1 02/01/19 A 2 1.0
1 03/01/19 A 3 0.0
2 02/01/19 A 7 2.0
2 04/01/19 A 9 1.0
3 04/01/19 A 11 0.0
推荐阅读
- flutter - TweenAnimationBuilder 动画太快
- azure-active-directory - 使用应用程序 ID 从 Java 应用程序调用 Microsoft Graph 时出现禁止错误
- npm - Npm 新手。为什么 npm 命令不起作用?
- azure - Azure SQL Server 异地复制资源
- javascript - 我收到带有 innerHTML 的跨站点脚本 (XSS) 警告
- selenium - 当我终止任务调度程序任务时,有没有办法调用内部函数?
- bamboo - 竹文件路径作为字符串传递
- sql-server - 在变量中使用引号在 SQL 中构造字符串
- bash - 没有人在服务器上时关闭计算机
- questdb - 如何在 QuestDB 中实现高可用?