Группировка (статистика) по Стерджессу

Хочу сделать группировку Стерджесса на Python. Никто не знает, где можно про это почитать? Так и не поняла, как сделать группировку data frame по определённому интервалу (гуглила, есть только про группы).

Теперь как-то надо задать чтобы столбец Fixed_assets_value сгруппировал
xmin+ i, потом xmin+ i * 2 и так до xmin+ i*n.
и вывел это сначала в виде дата фрейма (при этом в каждой группе посчитав общую сумму значений и добавил колонки).
Прикладываю скрины, как я пыталась решить эту задачу.

P.S. Вот исходные данные. Помогите кто может.

import numpy as np
import pandas as pd
df = pd.read_csv('zad_p.csv', delimiter=';')
df = df.rename(columns={'fixed assets value': 'Fixed_assets_value', 'gross output  at constant prices': 'Gross_output_at_constant_prices', 'average on establishment number of workers' : 'Average_on_establishment_number_of_workers', 'Average daily processing of beets' : 'Average_daily_processing_of_beets'})
import math
quantity = len(df)
y = math.log10(quantity)
n = 1 + (3.322*y) 
print(n)
n = math.ceil(n)
print (n)
xmax = df['Fixed_assets_value'].max()
xmin = df['Fixed_assets_value'].min()
i = ((xmax - xmin)/ n)
print (xmin, xmax, math.ceil(i))

введите сюда описание изображения

введите сюда описание изображения

введите сюда описание изображения

введите сюда описание изображения

введите сюда описание изображения

введите сюда описание изображения


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

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

Если я правильно понял вопрос:

i = np.ceil(((xmax - xmin)/ n))
bins = np.arange(xmin, xmax+i, i)
labels = np.arange(1, len(bins))

df["group_id"] = pd.cut(df["Fixed_assets_value"], bins=bins, 
                        labels=labels, right=False)

результат:

In [181]: df
Out[181]:
     №  Fixed_assets_value  Gross_output_at_constant_prices  Average_on_establishment_number_of_workers  Average_daily_processing_of_beets group_id
0    1                 500                              535                                         420                               12.2        2
1    2                 693                              688                                         550                               13.2        3
2    3                 690                              705                                         570                               13.7        3
3    4                1010                              725                                         883                               18.0        5
4    5                 810                              526                                         433                               10.7        4
5    6                1112                             1110                                         839                               12.0        6
6    7                 488                              353                                         933                               14.2        2
7    8                 735                              543                                         526                               12.1        3
8    9                1007                              768                                         693                               20.8        5
9   10                 788                              823                                         684                               11.0        4
10  11                 703                              408                                        1291                               20.7        3
11  12                 485                             1047                                         553                               18.5        2
12  13                 435                              610                                         496                               17.4        1
13  14                 343                              531                                         367                               12.4        1
14  15                 806                              740                                         706                               21.3        4
15  16                 611                              708                                         555                               18.4        2
16  17                 979                              634                                         623                               22.1        5
17  18                 385                              152                                         371                               10.7        1
18  19                1083                             1143                                         977                               45.3        6
19  20                 670                              410                                         738                               16.9        3
20  21                 663                             1337                                         992                               17.7        3
21  22                 647                              634                                         495                               20.0        3
22  23                 608                              362                                         456                               13.9        2
23  24                 811                              492                                         789                               24.5        4
24  25                 947                              904                                         628                               23.1        5
25  26                1186                              536                                         653                               18.2        6
26  27                 469                              627                                         456                                9.0        1
27  28                 849                             1709                                        1023                               27.3        4
28  29                 756                             1164                                         581                               17.7        3
29  30                 643                             1263                                         552                               19.7        3
→ Ссылка
Автор решения: passant

Вы все делаете почти правильно, только чуть чуть не дотянули до конца. Ниже работающий пример кода. По признаку "А" делим на интервалы по правилу Стерджесса, по признаку "B" - суммируем внутри группы. Надеюсь применить это к вашему коду сумеете самостоятельно.

df=pd.DataFrame({'A': a,'B':b})
n=math.ceil(3.322*math.log10(len(a))+1 )
a_groups = pd.cut(df['A'], bins=n)
df.groupby(a_groups)['B'].sum()
→ Ссылка