Группировка Pandas

Имеются данные, нужно разбить на 9 интервалов. После проверить каждый элемент к какому интервалу он принадлежит Исходные данные 3414, 3563, 3391, 3463, 3110, 2844, 3292, 3321, 3608, 2753, 2886, 3596, 3644, 4029, 4023, 4870, 5859, 6321, 5923, 5699, 5521, 5995

моя попытка реализации

import pandas as pd
import numpy as np


excel_file = pd.ExcelFile('example.xlsx')

require_cols = [1]
df = pd.read_excel('example.xlsx', usecols=require_cols)
df_min_max = df.aggregate(['min', 'max'])

my_list = df["Data"].tolist()
interval = pd.cut(np.array(my_list), 9)
print(my_list)
print(interval)
print(df_min_max)

Это данные

это интервалы на которые я разбил каждый интервал я обозначаю А Какие данные принадлежат какому интервалу

первая фотка это данные вторая это это интервалы на которые я разбил третья это как я обозначил каждый интервал четвертая я сопоставляю какие данные принадлежат какому интервалу


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

Автор решения: CrazyElf

Не совсем понял, что вы хотите, но там можно поиграться параметрами labels и retbins. Например, если выставить labels=False, то можно получить на выходе сразу номера бинов, в которые попали значения и больше ничего лишнего:

import pandas as pd
import numpy as np

txt = "3414, 3563, 3391, 3463, 3110, 2844, 3292, 3321, 3608, 2753, 2886, 3596, 3644, 4029, 4023, 4870, 5859, 6321, 5923, 5699, 5521, 5995"
data = list(map(int, txt.split(', ')))
df = pd.DataFrame({'Data': data})
df_min_max = df.aggregate(['min', 'max'])

my_list = df["Data"].tolist()
interval = pd.cut(np.array(my_list), 9, labels=False)
print(my_list)
print(interval)
print(df_min_max)

Вывод:

[3414, 3563, 3391, 3463, 3110, 2844, 3292, 3321, 3608, 2753, 2886, 3596, 3644, 4029, 4023, 4870, 5859, 6321, 5923, 5699, 5521, 5995]
[1 2 1 1 0 0 1 1 2 0 0 2 2 3 3 5 7 8 7 7 6 8]
     Data
min  2753
max  6321
→ Ссылка
Автор решения: strawdog

@CrazyElf правильно намекнул на использование параметра labels

import pandas as pd

lst = [3414, 3563, 3391, 3463, 3110, 2844, 3292, 3321, 3608, 2753, 2886,
       3596, 3644, 4029, 4023, 4870, 5859, 6321, 5923, 5699, 5521, 5995]

df = pd.DataFrame({"Data":lst})
bins = 9
df["Interval"] = pd.cut(df["Data"], bins, labels=["A"+str(x) for x in range(1, bins+1)])

df, соответственно, получится:

    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

→ Ссылка