Определите функцию, вычисляющую количество секунд между «входом» и «выходом» из группы из 2 строк, возвращая также код area :
def fn(grp):
return pd.Series([grp.iloc[0, 2], int((grp.iloc[1, 3]
- grp.iloc[0, 3]).total_seconds())], index=['area', 'secs'])
ТогдаИдея такова:
- сгруппировать исходные строки в пары (2 последовательные строки для "in" и "out"),
- применить вышеупомянутую функцию, вычисляя общее количество секунд для этого "периода",
- сгруппируйте приведенный выше результат по area и вычислите mean .
Код для этого:
df.groupby(np.arange(len(df.index)) // 2).apply(fn).groupby('area').mean()
Для ваших данных результат:
secs
area
K1 1579650
K3 2420100
K5 5299200
Если вы хотите, вы можете преобразовать его, например, в Timedelta .