python - 在 pandas 数据框中查找事件的每个 id 的连续天数
问题描述
这是我的数据框:
employeeid eventid event_date
1 1 2020-11-01
1 1 2020-11-02
1 0 2020-11-02
1 1 2020-11-03
1 1 2020-11-04
1 1 2020-11-05
1 1 2020-11-06
2 1 2020-11-01
2 1 2020-11-02
2 0 2020-11-02
3 1 2020-11-01
3 1 2020-11-02
3 1 2020-11-03
我想找到事件 1 的每个驱动程序的连续天数,
输出必须是:
employeeid eventid start_date consecutive_days
1 1 2020-11-01 2
1 1 2020-11-03 4
2 1 2020-11-01 2
3 1 2020-11-01 3
我用 cumsum() 尝试了一些东西,但没有运气。
我该怎么做?
解决方案
首先为每个组创建1
连续几天的组,过滤DataFrame
,boolean indexing
然后GroupBy.agg
使用命名聚合进行聚合:
m1 = df['eventid'].ne(1)
m2 = df.groupby('employeeid')['event_date'].diff().dt.days.fillna(1).ne(1)
m = (m1 & m2)
df['g'] = m.cumsum()
df = df[~m]
df = (df.groupby(['employeeid', 'g']).agg(start_date = ('event_date', 'first'),
consecutive_days = ('event_date', 'size'))
.reset_index(level=1, drop=True)
.reset_index())
推荐阅读
- python - 使用带有文本文件和不同编码的 read() 的意外输出
- python - 使用 Docker 将我使用 Anaconda 开发的应用程序容器化
- apache-flink - Flink如何不为操作员保存状态?
- mediawiki - 打印模板名称的模板中的 Mediawiki 魔术词或解析器功能?
- php - 具有多个动态条件的 SQL 查询选择
- python - 使用 Python 创建复杂的 JSON 并创建一些有条件的嵌套数组
- bash - 尝试创建 bash 脚本时出现 git 错误“致命:带有 -a 的路径没有意义。”
- marklogic - 何时使用集合与目录?
- sql - SQL 存储为 JSON 与向表中添加字段
- c++ - 关于向量中重复的 unique_ptr 项的所有权错误