首页 > 解决方案 > 在 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() 尝试了一些东西,但没有运气。

我该怎么做?

标签: pythonpandas

解决方案


首先为每个组创建1连续几天的组,过滤DataFrameboolean 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())

推荐阅读