У меня есть следующий код, который в основном пытается найти группы близких событий с одинаковым идентификатором:
#!/usr/bin/env python3
import pandas as pd
import numpy as np
times = pd.date_range('1/1/2011', periods=72, freq='M')
times = times[(times < times[20]) | (times > times[40])]
df = pd.DataFrame({"value" : np.random.rand(len(times)), "times" : times, "id": np.random.randint(4, size=len(times))})
res = df.groupby("id").apply(lambda x: (x['times'].diff() > np.timedelta64(60, 'D')).astype('int').cumsum())
print(res)
Результат примерно такой:
id
0 1 0
4 1
8 2
10 3
11 3
12 3
17 4
31 5
36 6
39 7
40 7
47 8
49 9
1 3 0
6 1
14 2
15 2
16 2
19 3
25 4
29 5
35 6
37 7
44 8
46 9
50 10
2 5 0
7 1
13 2
18 3
20 4
23 5
24 5
26 6
27 6
30 7
45 8
3 0 0
2 0
9 1
21 2
22 2
28 3
32 4
33 4
34 4
38 5
41 6
42 6
43 6
48 7
Name: times, dtype: int64
Здесь, например, я знаю, что события 41, 42 и 43 относятся к одной и той же группе: они имеют одинаковый идентификатор (0) и близки друг другу во времени.
Теперь я хочу вернуть эти данные в исходный фрейм данных в виде нового столбца: как это сделать?
Я пробовал различные комбинации apply
, reset_index
и т. Д., Но, похоже, я не могу этого сделать.