Calculate min and max value of a transition with index of first occurrence in pandas
You have transitions of the form from -> to
. 'transition_index'
is based on the index of the "from" row, while the 'sec'
aggregations are based on the value associated with the "to" row.
We can shift the index and group on the ID and the shifted the ID, allowing us to use a single groupby with named aggregations to get the desired output.
df = df.reset_index()
df['index'] = df['index'].shift().astype('Int64')
(df.groupby([df['ID'].shift(1).rename('ID_1'), df['ID'].rename('ID_2')], sort=False)
.agg(sec_min=('sec', 'min'),
sec_max=('sec', 'max'),
transition_index=('index', 'first'),
count=('sec', 'size'))
.reset_index()
)
ID_1 ID_2 sec_min sec_max transition_index count
0 a b 1 7 0 3
1 b d 2 40 1 2
2 d d 0 0 2 1
3 d a 3 4 3 2
4 b c 10 10 5 1
5 c b 19 19 6 1
6 b a 2 2 10 1