Группировка (статистика) по Стерджессу
Хочу сделать группировку Стерджесса на 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 шт):
Если я правильно понял вопрос:
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
Вы все делаете почти правильно, только чуть чуть не дотянули до конца. Ниже работающий пример кода. По признаку "А" делим на интервалы по правилу Стерджесса, по признаку "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()





