Как разбить на группы построенные по заданному признаку?

Имеются данные разбитые на 9 интервалов и сопоставленные по группам:

    Data Interval
0   3414       A2
1   3563       A3
2   3391       A2
3   3463       A2
4   3110       A1
5   2844       A1
6   3292       A2
7   3321       A2
8   3608       A3
9   2753       A1
10  2886       A1
11  3596       A3
12  3644       A3
13  4029       A4
14  4023       A4
15  4870       A6
16  5859       A8
17  6321       A9
18  5923       A8
19  5699       A8
20  5521       A7
21  5995       A9

Kод реализации:

import pandas as pd
import numpy as np

# Импортируй

excel_file = pd.ExcelFile('example.xlsx')
# print(excel_file.sheet_names)
require_cols = [1]
df = pd.read_excel('example.xlsx', usecols=require_cols)
df_min_max = df.aggregate(['min', 'max'])
my_list = df["Data"].tolist()
# Меняем кол-во интервалов
bins = 9
# Сопоставляем данные с интервалами
interval = pd.cut(np.array(my_list), bins)
iv = df["Interval"] = pd.cut(df["Data"], bins, labels=["A" + str(x) for x in range(1, bins + 1)])
# Выводим результаты
print(my_list)
print(interval)
print(iv)
print(df_min_max)

Kак разбить на группы построенные по следующему принципу:

группы

Идем с верху, первый у на А2 второй А3, то есть мы выходим из А2 в А3 получаем (А2-А3), смотрим дальше из А3 в А2 получаем (А3-А2), по итогу все что выходит из А1 мы помещаем в первую группу, все что из А2 во вторую, все что из А3 в третью группу и так далее.
(А2-А3) это у нас во вторую группу
(А3-А2) это в третью группу


Ответы (1 шт):

Автор решения: MaxU
df["Interval"] = df["Interval"].astype(str)
df.loc[1:, "x"] = df.loc[1:, "Interval"] + "-" + df["Interval"].shift().loc[1:]

res = (df
       .dropna(subset=["x"])
       .groupby("Interval")
       ["x"]
       .apply(lambda x: x.str.cat(sep="; ")))

результат:

In [247]: res
Out[247]: 
Interval
A1    A1-A2; A1-A1; A1-A3; A1-A1
A2    A2-A3; A2-A2; A2-A1; A2-A2
A3    A3-A2; A3-A2; A3-A1; A3-A3
A4                  A4-A3; A4-A4
A6                         A6-A4
A7                         A7-A8
A8           A8-A6; A8-A9; A8-A8
A9                  A9-A8; A9-A7
Name: x, dtype: object
→ Ссылка