Добавил:
Developer Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекции / 11. Библиотека pandas Продолжение Jupyter Notebook

.pdf
Скачиваний:
31
Добавлен:
15.12.2022
Размер:
1.08 Mб
Скачать

19.11.2022, 13:26

11. Библиотека pandas. Продолжение - Jupyter Notebook

Библиотека pandas. Продолжение.

Группировка и агрегирование: методы .groupby() и .agg()

Часто случается, что данные необходимо сгруппировать по какому-то признаку ‒ по значениям определенной переменной. На входе имеется таблица (датафрейм), а на выходе хочется получить несколько таблиц: отдельная таблица для каждого значения. Давайте рассмотрим такой пример. У нас есть база данных с результатами выборов, и нам нужно сгруппировать данные по регионам.

Для начала импортируем библиотеку pandas и загрузим файл с данными.

In [1]:

import pandas as pd

Для разнообразия загрузим файл по ссылке с Github (база большая, загрузится не моментально):

In [2]:

df = pd.read_csv("https://raw.github/47130-8314.csv")

В таблице сохранены результаты выборов президента России 2012 года.

In [3]:

df.head()

Out[3]:

 

link

uik

kom1

kom2

kom3 kom4

kom

 

 

 

 

 

 

 

 

0

 

 

Республика

 

УИК

 

 

http://www.adygei.vybory.izbirkom.ru/region/ad...

1

Адыгея

Адыгейская

NaN

NaN

№1

 

 

 

(Адыгея)

 

 

 

 

 

 

 

 

 

 

1

 

 

Республика

 

УИК

 

 

http://www.adygei.vybory.izbirkom.ru/region/ad...

2

Адыгея

Адыгейская

NaN

NaN

№2

 

 

 

(Адыгея)

 

 

 

 

 

 

 

 

 

 

2

 

 

Республика

 

УИК

 

 

http://www.adygei.vybory.izbirkom.ru/region/ad...

3

Адыгея

Адыгейская

NaN

NaN

№3

 

 

 

(Адыгея)

 

 

 

 

 

 

 

 

 

 

3

 

 

Республика

 

УИК

 

 

http://www.adygei.vybory.izbirkom.ru/region/ad...

4

Адыгея

Адыгейская

NaN

NaN

№4

 

 

 

(Адыгея)

 

 

 

 

 

 

 

 

 

 

4

 

 

Республика

 

УИК

 

 

http://www.adygei.vybory.izbirkom.ru/region/ad...

5

Адыгея

Адыгейская

NaN

NaN

№5

 

 

 

(Адыгея)

 

 

 

 

 

 

 

 

 

 

5 rows × 34 columns

 

 

 

 

 

 

localhost:8888/notebooks/EXONTOOLS/2/Доп. занятия/11. Библиотека pandas. Продолжение.ipynb

1/19

19.11.2022, 13:26

11. Библиотека pandas. Продолжение - Jupyter Notebook

In [4]:

df.info()

<class 'pandas.core.frame.DataFrame'> RangeIndex: 90003 entries, 0 to 90002

Data columns (total 34

columns):

link

90003

non-null

object

uik

90003

non-null

int64

kom1

90003

non-null

object

kom2

90003

non-null

object

kom3

89618

non-null

object

kom4

0 non-null float64

kom5

0 non-null float64

1

89994

non-null

float64

2

89994

non-null

float64

3

89994

non-null

float64

4

89994

non-null

float64

5

89994

non-null

float64

6

89994

non-null

float64

7

89994

non-null

float64

8

89994

non-null

float64

9

89994

non-null

float64

1089994 non-null float64

1189994 non-null float64

1289994 non-null float64

1389994 non-null float64

1489994 non-null float64

1589994 non-null float64

1689994 non-null float64

1789994 non-null float64

1889994 non-null float64

1989994 non-null float64

2089994 non-null float64

2189994 non-null float64

2289994 non-null float64

2389994 non-null float64 а 0 non-null float64

б 0 non-null float64 в 0 non-null float64 г 0 non-null float64

dtypes: float64(29), int64(1), object(4) memory usage: 23.3+ MB

Таблица достаточно большая, поэтому давайте выберем те столбцы, которые понадобятся нам для работы. Какие именно? Столбцы в этой базе имеют порядковый номер строки в таблице на сайте () Центральной избирательной комиссии.

Выберем столбцы, которые соответствуют уровням комиссий, а также следующим показателям: общее число зарегистрированных избирателей, число недействительных бюллетеней, число действительных бюллетеней, число голосов за Жириновского, Зюганова, Миронова, Прохорова и Путина.

In [5]:

d = df[["kom1", "kom2", "kom3", "1", "9", "10", "19", "20", "21", "22", "23"]]

localhost:8888/notebooks/EXONTOOLS/2/Доп. занятия/11. Библиотека pandas. Продолжение.ipynb

2/19

19.11.2022, 13:26

11. Библиотека pandas. Продолжение - Jupyter Notebook

In [6]:

d.head()

Out[6]:

 

kom1

kom2

kom3

1

9

10

19

20

21

22

23

 

 

 

 

 

 

 

 

 

 

 

 

0

Республика

Адыгейская

УИК

2383.0

19.0

1571.0

24.0

382.0

28.0

71.0

1066.0

Адыгея (Адыгея)

№1

1

Республика

Адыгейская

УИК

2865.0

29.0

1831.0

51.0

453.0

49.0

104.0

1174.0

Адыгея (Адыгея)

№2

2

Республика

Адыгейская

УИК

2821.0

31.0

1673.0

36.0

481.0

24.0

107.0

1025.0

Адыгея (Адыгея)

№3

3

Республика

Адыгейская

УИК

2069.0

0.0

1246.0

0.0

414.0

0.0

48.0

784.0

Адыгея (Адыгея)

№4

4

Республика

Адыгейская

УИК

777.0

8.0

454.0

19.0

138.0

4.0

7.0

286.0

Адыгея (Адыгея)

№5

Теперь присвоим столбцам более информативные названия:

In [7]:

d.columns = ["region", "tik", "uik", "total", "invalid", "valid", "Zh", "Zu", "Mi", "Pr", "

In [8]:

d.head() # опять посмотрим

Out[8]:

 

region

tik

uik

total

invalid

valid

Zh

Zu

Mi

Pr

Pu

 

 

 

 

 

 

 

 

 

 

 

 

0

Республика

 

УИК

 

 

 

 

 

 

 

 

Адыгея

Адыгейская

2383.0

19.0

1571.0

24.0

382.0

28.0

71.0

1066.0

№1

 

(Адыгея)

 

 

 

 

 

 

 

 

 

 

1

Республика

 

УИК

 

 

 

 

 

 

 

 

Адыгея

Адыгейская

2865.0

29.0

1831.0

51.0

453.0

49.0

104.0

1174.0

№2

 

(Адыгея)

 

 

 

 

 

 

 

 

 

 

2

Республика

 

УИК

 

 

 

 

 

 

 

 

Адыгея

Адыгейская

2821.0

31.0

1673.0

36.0

481.0

24.0

107.0

1025.0

№3

 

(Адыгея)

 

 

 

 

 

 

 

 

 

 

3

Республика

 

УИК

 

 

 

 

 

 

 

 

Адыгея

Адыгейская

2069.0

0.0

1246.0

0.0

414.0

0.0

48.0

784.0

№4

 

(Адыгея)

 

 

 

 

 

 

 

 

 

 

4

Республика

 

УИК

 

 

 

 

 

 

 

 

Адыгея

Адыгейская

777.0

8.0

454.0

19.0

138.0

4.0

7.0

286.0

№5

 

(Адыгея)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Посмотрим теперь, какие регионы есть в базе. Выбрать столбец region в таком случае будет не совсем удачно, поскольку в нем будет много повторяющихся значенийй. Посмотрим только на уникальные:

localhost:8888/notebooks/EXONTOOLS/2/Доп. занятия/11. Библиотека pandas. Продолжение.ipynb

3/19

19.11.2022, 13:26

11. Библиотека pandas. Продолжение - Jupyter Notebook

In [9]:

d.region.unique() # метод unique - уникальные значения

Out[9]:

array(['Республика Адыгея (Адыгея)', 'Республика Алтай', 'Республика Башкортостан', 'Республика Бурятия', 'Республика Дагестан', 'Республика Дагестан', 'Республика Ингушетия', 'Кабардино-Балкарская Республика',

'Республика Калмыкия', 'Карачаево-Черкесская Республика', 'Республика Карелия', 'Республика Коми', 'Республика Марий Эл', 'Республика Мордовия', 'Республика Саха (Якутия)', 'Республика Северная Осетия - Алания', 'Республика Тыва', 'Удмуртская Республика', 'Республика Хакасия', 'Чувашская Республика - Чувашия', 'Алтайский край',

'Забайкальский край', 'Камчатский край', 'Краснодарский край', 'Красноярский край', 'Пермский край', 'Приморский край', 'Ставропольский край', 'Хабаровский край', 'Хабаровский край', 'Амурская область', 'Архангельская область', 'Астраханская область', 'Белгородская область', 'Брянская область', 'Владимирская область', 'Волгоградская область',

'Вологодская область', 'Воронежская область', 'Ивановская область', 'Иркутская область', 'Калужская область', 'Кемеровская область', 'Кировская область', 'Костромская область', 'Курганская область', 'Курская область', 'Ленинградская область', 'Липецкая область', 'Магаданская область', 'Московская область', 'Мурманская область', 'Мурманская область', 'Нижегородская область', 'Новгородская область', 'Новосибирская область', 'Омская область',

'Оренбургская область', 'Орловская область', 'Пензенская область', 'Псковская область', 'Ростовская область', 'Рязанская область', 'Самарская область', 'Саратовская область', 'Сахалинская область', 'Свердловская область', 'Смоленская область', 'Тамбовская область', 'Тверская область', 'Томская область', 'Тульская область', 'Тюменская область', 'Ульяновская область', 'Челябинская область', 'Город Москва', 'Город Санкт-Петербург', 'Город Санкт-Петербург', 'Еврейская автономная область', 'Ненецкий автономный округ', 'Чукотский автономный округ', 'Ямало-Ненецкий автономный округ', 'Город Байконур (Республика Казахстан)',

'Территория за пределами РФ'], dtype=object)

Видно, что в этом массиве встречаются какие-то крокозябры (названия со странной кодировкой). Давайте уберем эти строки из базы.

In [10]:

# отфильтруем с помощью условий

d = d[(d.region != 'Республика Дагестан') & (d.region != 'Хабаровский край') &

(d.region != 'Мурманская область') & (d.region != 'Город Санкт-Петербург')]

Сгруппируем данные по регионам и посчитаем для каждого региона явку в процентах и процент голосов за каждого кандидата. Группировка осуществляется с помощью метода .groupby() .

localhost:8888/notebooks/EXONTOOLS/2/Доп. занятия/11. Библиотека pandas. Продолжение.ipynb

4/19

19.11.2022, 13:26

11. Библиотека pandas. Продолжение - Jupyter Notebook

In [11]:

d.groupby('region') # пока ничего не увидели

Out[11]:

<pandas.core.groupby.DataFrameGroupBy object at 0x7ffb59de38d0>

Что выдает метод .groupby() ? На самом деле он делает следующее: создает список, состоящий из кортежей. Каждый кортеж ‒ это пара название группы-соответствующий ей фрагмент датафрейма.

In [ ]:

# посмотрим на все сразу

for g in d.groupby('region'): print(g)

В таком виде метод .groupby() дает нам немного. Мы же хотим не просто получать отдельные таблицы, а агрегировать данные по регионам ‒ суммировать все показатели (число избирателей, бюллетеней, голосов) по каждому региону. Тут на помощь придет метод .agg() , который выполняет агрегирование по группам.

localhost:8888/notebooks/EXONTOOLS/2/Доп. занятия/11. Библиотека pandas. Продолжение.ipynb

5/19

19.11.2022, 13:26

11. Библиотека pandas. Продолжение - Jupyter Notebook

In [12]:

d.groupby('region').agg('sum')

Out[12]:

total invalid

valid

Zh

Zu

Mi

Pr

region

Алтайский край

Амурская

область

Архангельская

область

Астраханская

область

Белгородская

область

Брянская

область

Владимирская

область

Волгоградская

область

Вологодская

область

Воронежская

область

Город Байконур (Республика Казахстан)

Город Москва

Город СанктПетербург

Еврейская

автономная

область

Забайкальский

край

Ивановская

область

Иркутская

область

КабардиноБалкарская Республика

Калужская

область

Камчатский

край

КарачаевоЧеркесская Республика

1961328.0

12004.0

1163426.0

97961.0

261665.0

45883.0

83778.0

6741

662320.0

4708.0

394996.0

39717.0

67433.0

13594.0

23070.0

2511

988678.0

5522.0

569492.0

51169.0

91648.0

33223.0

60108.0

3333

769608.0

5107.0

427496.0

21918.0

67662.0

18595.0

21873.0

2974

1210590.0

10209.0

889764.0

59561.0

211079.0

35601.0

49807.0

5337

1045083.0

6922.0

692926.0

42974.0

146340.0

23453.0

32141.0

4480

1202174.0

8484.0

629526.0

53615.0

132400.0

41895.0

60315.0

3413

2003455.0

12696.0

1265720.0

87657.0

240998.0

55325.0

71142.0

8105

987574.0

6596.0

601999.0

49492.0

93417.0

40306.0

57064.0

3617

1918524.0

13073.0

1291271.0

81081.0

292379.0

47974.0

69813.0

8000

15116.0

185.0

10422.0

586.0

1288.0

317.0

722.0

75

7309869.0

87698.0

4159740.0

267418.0

814573.0

214703.0

868736.0

19943

3849426.0

33331.0

2355236.0

110979.0

311937.0

157768.0

370799.0

14037

135703.0

1208.0

78205.0

6632.0

14796.0

2763.0

5102.0

489

831712.0

5271.0

493136.0

49612.0

71636.0

15015.0

29466.0

3274

866474.0

5338.0

513901.0

37650.0

95005.0

23060.0

37016.0

3211

1915179.0

12186.0

1060537.0

88419.0

242097.0

41152.0

94008.0

5948

528147.0

418.0

385368.0

11888.0

53261.0

11753.0

8937.0

2995

798196.0

6327.0

500606.0

37634.0

101459.0

21427.0

40911.0

2991

256522.0

1951.0

154696.0

16504.0

25009.0

5430.0

14015.0

937

319473.0

631.0

290989.0

2851.0

16937.0

2162.0

2629.0

2664

localhost:8888/notebooks/EXONTOOLS/2/Доп. занятия/11. Библиотека pandas. Продолжение.ipynb

6/19

19.11.2022, 13:26

11. Библиотека pandas. Продолжение - Jupyter Notebook

total invalid

valid

Zh

Zu

Mi

Pr

region

 

 

 

 

 

Кемеровская

область

Кировская

область

Костромская

область

Краснодарский

край

Красноярский

край

Курганская

область

Курская область

Ленинградская

область

Липецкая

область

...

Республика

Калмыкия

Республика

Карелия

Республика

Коми

Республика Марий Эл

Республика

Мордовия

Республика Саха (Якутия)

Республика

Северная Осетия - Алания

Республика

Тыва

Республика

Хакасия

Ростовская

область

Рязанская

область

Самарская

область

Саратовская

область

Сахалинская

область

Свердловская

область

2076673.0

16002.0

1626578.0

112067.0

133705.0

37450.0

75519.0

12678

1125794.0

7864.0

682321.0

54531.0

127982.0

36005.0

63993.0

3998

567472.0

3076.0

345513.0

28204.0

90714.0

16094.0

26517.0

1839

3803307.0

32893.0

2659197.0

176119.0

496909.0

88976.0

181844.0

17153

2192321.0

16279.0

1287567.0

112222.0

235058.0

46123.0

109827.0

7843

751903.0

4314.0

478077.0

41340.0

83955.0

19280.0

27725.0

3057

947765.0

6350.0

600367.0

49744.0

122775.0

23101.0

38002.0

3667

1281947.0

10664.0

800093.0

54857.0

114951.0

47518.0

80874.0

5018

954695.0

7751.0

618784.0

44697.0

132408.0

24722.0

34778.0

3821

...

...

...

...

...

...

...

 

214497.0

1242.0

131760.0

3374.0

23295.0

3562.0

8029.0

935

558774.0

3839.0

305600.0

26579.0

50957.0

18886.0

37798.0

1713

750661.0

6970.0

518810.0

40314.0

70135.0

22738.0

43759.0

3418

537932.0

3984.0

377164.0

24895.0

84200.0

15175.0

24282.0

2286

649355.0

3796.0

577911.0

13635.0

42060.0

6448.0

9353.0

5064

614351.0

3978.0

453719.0

20010.0

65871.0

20193.0

29712.0

3179

512245.0

3995.0

409435.0

13063.0

87017.0

12864.0

6848.0

2896

159341.0

860.0

146720.0

2574.0

6370.0

2023.0

2925.0

1328

382578.0

2819.0

244660.0

20991.0

50872.0

8878.0

19400.0

1445

3315673.0

21742.0

2091438.0

132418.0

423884.0

76633.0

134461.0

13240

967998.0

6508.0

614459.0

47068.0

132981.0

25562.0

37903.0

3709

2562916.0

20828.0

1536839.0

117828.0

320128.0

61361.0

125423.0

9120

1991376.0

12400.0

1310761.0

66985.0

206818.0

43267.0

59006.0

9346

398893.0

2846.0

225504.0

20016.0

45730.0

8856.0

22337.0

1285

3527808.0

25560.0

2048423.0

107819.0

251690.0

113353.0

237780.0

13377

localhost:8888/notebooks/EXONTOOLS/2/Доп. занятия/11. Библиотека pandas. Продолжение.ipynb

7/19

19.11.2022, 13:26

11. Библиотека pandas. Продолжение - Jupyter Notebook

total invalid

valid

Zh

Zu

Mi

Pr

region

 

 

 

 

 

Смоленская

область

Ставропольский

край

Тамбовская

область

Тверская

область

Территория за пределами РФ

Томская

область

Тульская

область

Тюменская

область

Удмуртская

Республика

Ульяновская

область

Хабаровский

край

Челябинская

область

Чувашская Республика - Чувашия

Чукотский

автономный

округ

ЯмалоНенецкий автономный округ

816276.0

5843.0

476106.0

38246.0

111182.0

20930.0

32516.0

2732

1983954.0

12448.0

1183292.0

83543.0

215600.0

37551.0

75724.0

7708

884888.0

5570.0

614521.0

28179.0

107797.0

13973.0

19594.0

4449

1137087.0

7076.0

660420.0

49384.0

131591.0

32835.0

59302.0

3873

459661.0

5838.0

436093.0

12006.0

31785.0

8674.0

59942.0

3236

787075.0

5194.0

453117.0

35139.0

86403.0

16966.0

53028.0

2615

1249121.0

8862.0

858707.0

50218.0

147019.0

29601.0

43917.0

5879

1056505.0

6915.0

829264.0

59083.0

95398.0

20455.0

43047.0

6112

1218251.0

9048.0

775357.0

49160.0

116277.0

26803.0

67362.0

5157

1048667.0

6926.0

659233.0

46384.0

160089.0

27783.0

37437.0

3875

1056125.0

8733.0

645264.0

68500.0

115436.0

31944.0

62145.0

3672

2757879.0

25366.0

1704033.0

97869.0

254542.0

88177.0

138907.0

11245

954572.0

10465.0

692492.0

39707.0

144676.0

31201.0

38838.0

4380

35968.0

428.0

28909.0

2106.0

2651.0

633.0

2209.0

213

358834.0

2669.0

332293.0

17456.0

18738.0

4979.0

7807.0

2833

80 rows × 8 columns

Сначала в .groupby() мы указали переменную, по которой нужно выполнить группировку, затем в

.agg() мы указали функцию, которую нужно выполнить. В нашем случае это 'sum', поскольку нам нужно просто сложить все показатели в пределах одного региона. Применять можно и другие функции, например, считать среднее:

localhost:8888/notebooks/EXONTOOLS/2/Доп. занятия/11. Библиотека pandas. Продолжение.ipynb

8/19

19.11.2022, 13:26

11. Библиотека pandas. Продолжение - Jupyter Notebook

In [16]:

d.groupby('region').agg('mean').head() # mean - среднее

Out[16]:

 

 

 

total

invalid

valid

Zh

Zu

 

Mi

P

 

 

region

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Алтайский

1053.344791

6.446831

624.825994

52.610634

140.529001

24.641783

44.99355

 

 

край

 

 

 

 

 

 

 

 

 

 

Амурская

845.874840

6.012771

504.464879

50.724138

86.121328

17.361430

29.46360

 

 

область

 

 

 

 

 

 

 

 

 

 

 

Архангельская

1004.754065

5.611789

578.752033

52.001016

93.138211

33.763211

61.08536

 

 

область

 

 

 

 

 

 

 

 

 

Астраханская

1313.324232

8.715017

729.515358

37.402730

115.464164

31.732082

37.32593

 

 

область

 

 

 

 

 

 

 

 

 

Белгородская

968.472000

8.167200

711.811200

47.648800

168.863200

28.480800

39.84560

 

 

область

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Или сразу несколько статистик. которые можно указать в .agg() в виде списка.

In [17]:

d.groupby('region').agg(['mean', 'median']).head() # среднее и медиана

Out[17]:

 

 

 

 

total

 

invalid

 

valid

 

Z

 

 

 

mean

median

mean

median

mean

median

mean

media

 

 

region

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Алтайский

1053.344791

823.0

6.446831

4.0

624.825994

495.0

52.610634

41

 

 

край

 

 

 

 

 

 

 

 

 

 

 

Амурская

845.874840

523.0

6.012771

4.0

504.464879

326.0

50.724138

31

 

 

область

 

 

 

 

 

 

 

 

 

 

 

 

Архангельская

1004.754065

581.5

5.611789

2.0

578.752033

332.5

52.001016

29

 

 

область

 

 

 

 

 

 

 

 

 

 

Астраханская

1313.324232

1283.5

8.715017

6.0

729.515358

692.5

37.402730

31

 

 

область

 

 

 

 

 

 

 

 

 

 

Белгородская

968.472000

802.0

8.167200

6.0

711.811200

633.0

47.648800

41

 

 

область

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Кроме того, внутри .agg() можно указывать свои функции. Например, нас интересует разница между максимальным и минимальным значением. Сначала напишем функцию my_diff , которая будет определять такую разность:

In [18]:

def my_diff(x):

return max(x) - min(x)

localhost:8888/notebooks/EXONTOOLS/2/Доп. занятия/11. Библиотека pandas. Продолжение.ipynb

9/19

19.11.2022, 13:26

11. Библиотека pandas. Продолжение - Jupyter Notebook

Проверим, как она работает:

In [19]:

my_diff([4, 6, 8]) # все верно, 8 - 4 = 4

Out[19]:

4

Теперь используем эту функцию внутри .agg() :

In [20]:

d.groupby('region').agg(my_diff).head() # везде смотрим на первые 5 строк

Out[20]:

 

total

invalid

valid

Zh

Zu

Mi

Pr

Pu

region

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Алтайский край

3030.0

72.0

2389.0

379.0

573.0

131.0

351.0

1639.0

Амурская область

2942.0

130.0

1773.0

267.0

404.0

92.0

197.0

1201.0

Архангельская область

2953.0

76.0

1951.0

232.0

407.0

153.0

369.0

1205.0

Астраханская область

2936.0

223.0

1862.0

209.0

411.0

157.0

234.0

1367.0

Белгородская область

2998.0

71.0

2118.0

234.0

612.0

108.0

335.0

1268.0

Возможностей на самом деле у метода .agg() много, но давайте более продвинутые вещи оставим на потом (будет выложен отдельный конспект с дополнительными материалами).

Все, что мы пока сделали, очень интересно, но есть проблема: все данные пока даны в абсолютных значениях, не в процентах. Это неудобно. Давайте сгруппируем данные по региону и добавим в базу с агрегированными данными новые столбцы: явка в процентах и проценты голосов за каждого кандидата.

Для этого необходимо вспомнить, как считается явка и проценты голосов. Явка считается так: суммируем число действительных и недействительных бюллетеней. Чтобы получить явку в процентах, делим явку на общее число зарегистрированных избирателей и домножаем на 100, чтобы перевести долю в проценты. Проценты голосов за кандидатов считаем от явки, берем число голосов за кандидата, делим на явку и домножаем на 100. Проделаем это поэтапно.

Сначала сохраним результат агрегирования в переменную regs и добавим новый столбец для явки в абсолютных значениях (в голосах).

In [21]:

regs = d.groupby('region').agg('sum')

regs["turnout"] = regs.invalid + regs.valid # новый столбец - сумма двух старых

localhost:8888/notebooks/EXONTOOLS/2/Доп. занятия/11. Библиотека pandas. Продолжение.ipynb

10/19