0

独自のラムダ関数を使用せずに、groupby 操作の結果のグループのカバーされたタイムスパンを受け取ることはできますか?

現在、私は以下の解決策を持っていますが、pandas 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 は、ラムダ関数を適用せずに、または最初にグループ化せずに同じことを行うトリックを提供しますか?

4

1 に答える 1