Как разбить на группы построенные по заданному признаку?
Имеются данные разбитые на 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
