首页 > 解决方案 > 找出连续多少天在熊猫中有特定值

问题描述

我有以下熊猫数据框:

Date           Value
2019-01-01       0
2019-01-02       0
2019-01-03       0
2019-01-04       0
2019-01-05       1
2019-01-06       1
2019-01-10       1
2019-01-11       0
2019-01-12       0
2019-01-13       0
2019-01-14       0

我想有一个值等于 0 的每组连续天的开始日期和结束日期,并获得如下内容:

Start Date  End Date.    N Days 
2019-01-01  2019-01-04    4
2019-01-11  2019-01-14    4

标签: pythonpandasdatetime

解决方案


用 创建子组cumsum,然后groupbyagg

s = df.Value.ne(0).cumsum()
out = df[df.Value.eq(0)].groupby(s).Date.agg(['first','last','count'])
out
Out[295]: 
            first        last  count
Value                               
0      2019-01-01  2019-01-04      4
3      2019-01-11  2019-01-14      4

更新

s = (df.Value.ne(0) | df.Date.diff().dt.days.ne(1)).cumsum()
out = df[df.Value.eq(0)].groupby(s).Date.agg(['first','last','count'])
out
Out[306]: 
       first       last  count
1 2019-01-01 2019-01-04      4
4 2019-01-11 2019-01-14      4
5 2020-01-01 2020-01-01      1

输入数据

         Date  Value
0  2019-01-01      0
1  2019-01-02      0
2  2019-01-03      0
3  2019-01-04      0
4  2019-01-05      1
5  2019-01-06      1
6  2019-01-10      1
7  2019-01-11      0
8  2019-01-12      0
9  2019-01-13      0
10 2019-01-14      0
11 2020-01-01      0

推荐阅读