我可以在不使用自己的 lambda 函数的情况下接收由 groupby 操作产生的组的覆盖时间跨度吗?
目前我有以下解决方案,但我想知道熊猫 API 是否还没有以某种方式内置?描述我在数据准备部分所做的事情:我的任务是找出布尔标志为 True 的时间,尤其是多长时间。我发现 ndimage.label-ing 是一种处理非连续数据块的有效方法。但我愿意接受任何其他很酷的建议!
import pandas as pd
from scipy.ndimage import label
# data preparation
idx = pd.date_range(start='now', periods = 100, freq='min')
df= pd.DataFrame(randn(100), index=idx, columns=['data'])
df['mybool'] = df.data > 0
df['label'] = label(df.mybool)[0]
# my actual question:
df.groupby('label').apply(lambda x:x.index[-1] - x.index[0])
基本上,我从每个组的第一个时间戳中减去最后一个时间戳。这导致:
label
0       01:37:00
1       00:00:00
2       00:01:00
3       00:01:00
4       00:01:00
5       00:02:00
6       00:00:00
7       00:10:00
8       00:00:00
9       00:01:00
10      00:02:00
11      00:00:00
12      00:01:00
13      00:04:00
14      00:02:00
15      00:01:00
16      00:00:00
17      00:00:00
18      00:00:00
19      00:01:00
20      00:00:00
21      00:01:00
22      00:02:00
23      00:00:00
24      00:00:00
dtype: timedelta64[ns]
重申我的问题:pandas API 是否提供了一个技巧,可以在不使用 lambda 函数或什至不先分组的情况下做同样的事情?