熊猫获得最大顺序

时间:2020-11-12 10:35:21

标签: pandas dataframe time timestamp

我有一个如下数据框:

index                 status    counting
2018-02-11 10:00:00   close     0
2018-02-11 10:00:01   close     0
2018-02-11 10:00:02   close     0
2018-02-11 10:00:03   open      1
2018-02-11 10:00:04   open      2
2018-02-11 10:00:05   open      3
2018-02-11 10:00:06   close     0
2018-02-11 10:00:07   close     0
2018-02-11 10:00:08   close     0
2018-02-11 10:00:09   open      1
2018-02-11 10:00:10   open      2
2018-02-11 10:00:11   open      3
2018-02-11 10:00:12   open      4
2018-02-11 10:00:13   open      5
2018-02-11 10:00:14   open      6
2018-02-11 10:00:15   close     0
2018-02-11 10:00:16   close     0
2018-02-11 10:00:17   close     0

我想计算连续“开放”间隔的平均持续时间。要么

  • 访问这些时间间隔的开头和结尾的索引 或
  • 对每个打开的块取最高计数..

有人知道吗?

1 个答案:

答案 0 :(得分:2)

您可以按open比较值,然后按~进行掩码反转,并累积组总和,并且仅过滤open行,最后传递到groupby

m = df['status'].eq('open')

s = df.groupby((~m).cumsum()[m])['counting'].max()
print (s)
status
3.0    3
6.0    6
Name: counting, dtype: int64

如果需要mean

s = df.groupby((~m).cumsum()[m])['counting'].mean()
print (s)
status
3.0    2.0
6.0    3.5
Name: counting, dtype: float64

如果需要最小值和最大值:

df = df.reset_index()
m = df['status'].eq('open')

df1 = df.groupby((~m).cumsum()[m])['index'].agg(['min','max'])
print (df1)
                        min                  max
status                                          
3.0     2018-02-11 10:00:03  2018-02-11 10:00:05
6.0     2018-02-11 10:00:09  2018-02-11 10:00:14

详细信息

print ((~m).cumsum())
0     1
1     2
2     3
3     3
4     3
5     3
6     4
7     5
8     6
9     6
10    6
11    6
12    6
13    6
14    6
15    7
16    8
17    9
Name: status, dtype: int32

print ((~m).cumsum()[m])
3     3
4     3
5     3
9     6
10    6
11    6
12    6
13    6
14    6
Name: status, dtype: int32