Я пытаюсь создать временной ряд изменения количества людей в определенной профессии с течением времени.
Я использовал функцию group_by для 'SURVDATE' (год и месяц опроса) и 'PROV' (провинция, в которой живет человек). Сейчас я сосредотачиваюсь на общем количестве людей определенной профессии в этой группе (провинции на каждый год).
Мой набор данных настроен таким образом, что в столбце «NOC_10» было 10 профессий, которые были дан соответствующий числовой код (ie Финансы = 1). Поэтому мне нужно суммировать или считать значения каждого занятия. Мне удалось сделать это с помощью .size () и .value_counts (). Sort_index ().
for date, df in data_QO.groupby(['SURVDATE', 'PROV', 'NOC_10']).size():
print(df)
Однако, когда я пытаюсь выполнить итерацию по этому вопросу, чтобы составить график изменения количества людей в каждой провинции в каждом занятии с течением времени, я получаю следующую ошибку:
TypeError: not распаковать не повторяемый объект int
Поэтому мой вопрос таков: есть ли способ выполнить итерацию по группе по объекту так, чтобы я взял сумму числа людей в каждой профессии в каждой провинции в каждом месяце и построить график зависимости суммы от месяца для каждого занятия в каждой провинции?
Для пояснения мне удалось создать аналогичные графики для отраслевой переменной:
industries = [1, 2, 4, 5, 6, 7, 8, 9, 10, 11]
for ind in industries:
data_ind_O = data_QO[(data_QO['NAICS_21'] == ind) & (data_QO['PROV'] == 35)].groupby(['SURVDATE', 'LFSSTAT']).size().unstack(fill_value=0)
data_ind_Q = data_QO[(data_QO['NAICS_21'] == ind) & (data_QO['PROV'] == 24)].groupby(['SURVDATE', 'LFSSTAT']).size().unstack(fill_value=0)
data_ind_O['ur_rate'] = data_ind_O[3] / (data_ind_O[1] + data_ind_O[2] + data_ind_O[3])
data_ind_Q['ur_rate'] = data_ind_Q[3] / (data_ind_Q[1] + data_ind_Q[2] + data_ind_Q[3])
plt.figure()
data_ind_O['ur_rate'].plot(linewidth=0.5, color='red')
data_ind_Q['ur_rate'].plot(linewidth=0.5, color='blue')
Снимок данных data_ind_O:
LFSSTAT 1 2 3 4 ur_rate
SURVDATE
2017-01-01 197 15 8 36 0.036364
2017-02-01 180 21 17 32 0.077982
2017-03-01 194 11 16 28 0.072398
2017-04-01 189 12 11 22 0.051887
2017-05-01 207 6 5 16 0.022936
2017-06-01 219 6 8 15 0.034335
2017-07-01 221 15 3 16 0.012552
2017-08-01 240 18 6 15 0.022727
2017-09-01 227 9 8 20 0.032787
2017-10-01 225 7 9 25 0.037344
2017-11-01 219 8 9 34 0.038136
2017-12-01 212 14 5 30 0.021645
2018-01-01 198 17 10 37 0.044444
2018-02-01 204 14 14 36 0.060345
2018-03-01 215 21 17 29 0.067194
2018-04-01 226 11 5 24 0.020661
2018-05-01 238 7 8 18 0.031621
2018-06-01 257 8 6 19 0.022140
2018-07-01 260 12 5 16 0.018051
2018-08-01 252 8 10 9 0.037037
2018-09-01 249 21 5 13 0.018182
2018-10-01 238 12 6 13 0.023438
2018-11-01 242 11 9 16 0.034351
2018-12-01 227 15 9 22 0.035857
2019-01-01 233 22 8 30 0.030418
2019-02-01 235 21 13 30 0.048327
2019-03-01 223 25 8 31 0.031250
2019-04-01 223 18 10 34 0.039841
2019-05-01 262 13 5 20 0.017857
2019-06-01 279 17 7 17 0.023102
2019-07-01 282 17 8 12 0.026059
2019-08-01 283 18 7 14 0.022727
2019-09-01 283 12 10 25 0.032787
2019-10-01 277 8 12 27 0.040404
2019-11-01 270 14 11 25 0.037288
2019-12-01 234 10 13 34 0.050584
LFSSTAT 1 2 3 4 ur_rate
SURVDATE
2017-01-01 31 4 5 5 0.125000
2017-02-01 34 1 7 6 0.166667
2017-03-01 27 3 9 7 0.230769
2017-04-01 30 1 3 6 0.088235
2017-05-01 41 2 2 5 0.044444
2017-06-01 41 1 3 5 0.066667
2017-07-01 37 4 2 4 0.046512
2017-08-01 33 5 3 5 0.073171
2017-09-01 42 4 3 9 0.061224
2017-10-01 41 1 3 5 0.066667
2017-11-01 31 3 1 5 0.028571
2017-12-01 31 4 2 4 0.054054
2018-01-01 40 0 0 3 0.000000
2018-02-01 41 2 1 6 0.022727
2018-03-01 37 0 2 9 0.051282
2018-04-01 30 1 4 10 0.114286
2018-05-01 39 1 0 4 0.000000
2018-06-01 42 1 0 1 0.000000
2018-07-01 38 7 0 0 0.000000
2018-08-01 38 2 3 0 0.069767
2018-09-01 30 5 2 8 0.054054
2018-10-01 21 1 9 6 0.290323
2018-11-01 24 1 11 3 0.305556
2018-12-01 28 0 5 3 0.151515
2019-01-01 27 3 6 7 0.166667
2019-02-01 25 4 3 5 0.093750
2019-03-01 21 5 1 3 0.037037
2019-04-01 22 6 4 4 0.125000
2019-05-01 29 2 5 6 0.138889
2019-06-01 28 4 1 2 0.030303
2019-07-01 34 1 1 3 0.027778
2019-08-01 28 2 2 2 0.062500
2019-09-01 19 3 2 6 0.083333
2019-10-01 18 2 4 6 0.166667
2019-11-01 21 6 3 5 0.100000
2019-12-01 23 2 4 9 0.137931
где ur_rate - уровень безработицы, который был найден путем деления общей численности рабочей силы (столбцы 1, 2 и 3) на общее количество безработных (столбец 3).
Однако я не могу не думать, что есть более эффективный способ сделать это.
Заранее большое спасибо.