python_example
  • 10살 단위로 인구를 정리한다.
  • 70대 이상은 하나로 합친다.
  • 3개의 기간동안 인구가 증가하는 곳을 찾는다.
  • 남성이 여성보다 많이 거주하는 곳 가운데 인구가 3만 이상인 곳을 찾는다. (없으면 없다)
In [85]:
import pandas as pd
import numpy as np

2018.06.30.기준 대구광역시 주민등록인구 현황

In [86]:
population_01 = pd.read_csv('data/2018.06.30.기준 대구광역시 주민등록인구 현황_UTF8.csv')
population_01
Out[86]:
구분 총계 총계 남 총계 여 중구 계 중구 남 중구 여 동구 계 동구 남 동구 여 ... 북구 여 수성구 계 수성구 남 수성구 여 달서구 계 달서구 남 달서구 여 달성군 계 달성군 남 달성군 여
0 0세 14568 7488 7080 511 275 236 2263 1161 1102 ... 1356 1784 911 873 3215 1719 1496 2724 1374 1350
1 1세 17475 8947 8528 609 309 300 2755 1410 1345 ... 1670 2264 1170 1094 3818 2017 1801 3063 1543 1520
2 2세 19562 9985 9577 612 308 304 3000 1467 1533 ... 1847 2684 1410 1274 4423 2317 2106 3327 1668 1659
3 3세 20123 10249 9874 648 315 333 3146 1656 1490 ... 1856 2876 1423 1453 4661 2366 2295 3253 1638 1615
4 4세 19794 10069 9725 556 287 269 2971 1519 1452 ... 1846 3089 1596 1493 4529 2294 2235 3036 1512 1524
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
96 96세 365 75 290 23 3 20 66 10 56 ... 37 73 15 58 64 12 52 31 9 22
97 97세 235 45 190 18 3 15 35 13 22 ... 36 43 7 36 39 6 33 16 3 13
98 98세 190 32 158 16 7 9 33 6 27 ... 30 29 4 25 25 6 19 15 0 15
99 99세 112 26 86 6 1 5 25 7 18 ... 13 17 4 13 19 2 17 8 2 6
100 100세 이상 614 136 478 88 15 73 106 23 83 ... 52 97 24 73 68 13 55 26 8 18

101 rows × 28 columns

In [87]:
df =population_01.copy()
In [88]:
drop_list = []
check_list = ['총계', '구분', ' 남', ' 여'] # 남구 삭제 방지를 위해 '남' 앞에 공백 추가 
for chk in check_list:
    for item in df.columns :
        if  chk in item:
            drop_list.append(item)
drop_list = list(set(drop_list)) #  중복 제거를 위해 set을 사용
In [89]:
df1 = df.drop(drop_list,axis=1)
df1
Out[89]:
중구 계 동구 계 서구 계 남구 계 북구 계 수성구 계 달서구 계 달성군 계
0 511 2263 719 586 2766 1784 3215 2724
1 609 2755 887 718 3361 2264 3818 3063
2 612 3000 1010 776 3730 2684 4423 3327
3 648 3146 949 758 3832 2876 4661 3253
4 556 2971 1014 820 3779 3089 4529 3036
... ... ... ... ... ... ... ... ...
96 23 66 30 29 49 73 64 31
97 18 35 18 24 42 43 39 16
98 16 33 15 23 34 29 25 15
99 6 25 10 11 16 17 19 8
100 88 106 89 72 68 97 68 26

101 rows × 8 columns

In [90]:
df1['인구0'] = (pd.DataFrame(range(0,101))/10).astype(int)*10
df1
Out[90]:
중구 계 동구 계 서구 계 남구 계 북구 계 수성구 계 달서구 계 달성군 계 인구0
0 511 2263 719 586 2766 1784 3215 2724 0
1 609 2755 887 718 3361 2264 3818 3063 0
2 612 3000 1010 776 3730 2684 4423 3327 0
3 648 3146 949 758 3832 2876 4661 3253 0
4 556 2971 1014 820 3779 3089 4529 3036 0
... ... ... ... ... ... ... ... ... ...
96 23 66 30 29 49 73 64 31 90
97 18 35 18 24 42 43 39 16 90
98 16 33 15 23 34 29 25 15 90
99 6 25 10 11 16 17 19 8 90
100 88 106 89 72 68 97 68 26 100

101 rows × 9 columns

In [91]:
df1['인구0'] = (pd.DataFrame(range(0,101))/10).astype(int)*10
df1 = df1.groupby('인구0')
df1 = df1.sum()
df1
Out[91]:
중구 계 동구 계 서구 계 남구 계 북구 계 수성구 계 달서구 계 달성군 계
인구0
0 5674 29075 9719 7797 37401 32508 46276 29751
10 5549 29903 14006 11162 48985 57880 63987 23382
20 11300 43608 25542 20608 61021 58097 82987 29853
30 11396 48971 21529 18912 57670 46528 72962 43404
40 11358 54564 27671 22502 77961 79395 98641 40726
50 12107 59064 38473 26615 75014 74095 104487 38816
60 10243 46790 29106 22642 45549 46530 61842 23984
70 7385 27835 16212 14612 25635 26830 30320 12057
80 2997 10725 5702 6239 9784 12104 12259 5235
90 433 1251 656 729 1054 1404 1291 636
100 88 106 89 72 68 97 68 26
In [92]:
df1['인구'] = df1.index
df1['인구'] = np.where(df1['인구'] >= 70, 70, df1.인구)
df1 = df1.groupby('인구')
df1 = df1.sum()
df1
Out[92]:
중구 계 동구 계 서구 계 남구 계 북구 계 수성구 계 달서구 계 달성군 계
인구
0 5674 29075 9719 7797 37401 32508 46276 29751
10 5549 29903 14006 11162 48985 57880 63987 23382
20 11300 43608 25542 20608 61021 58097 82987 29853
30 11396 48971 21529 18912 57670 46528 72962 43404
40 11358 54564 27671 22502 77961 79395 98641 40726
50 12107 59064 38473 26615 75014 74095 104487 38816
60 10243 46790 29106 22642 45549 46530 61842 23984
70 10903 39917 22659 21652 36541 40435 43938 17954
In [93]:
#df1['인구'] = (pd.DataFrame(range(0,101))/10).astype(int)*10
#df1['인구'] = np.where(df1['인구'] >= 70, 70, df1.인구)
#df1 = df1.groupby('인구')
#df1 = df1.sum()
#df1

2018.12.31.기준 대구광역시 주민등록인구 현황

In [94]:
population_02 = pd.read_csv('data/2018.12.31.기준 대구광역시 주민등록인구 현황_UTF8.csv')
population_02.head()
Out[94]:
구분 총계 총계 남 총계 여 중구 계 중구 남 중구 여 동구 계 동구 남 동구 여 ... 북구 여 수성구 계 수성구 남 수성구 여 달서구 계 달서구 남 달서구 여 달성군 계 달성군 남 달성군 여
0 0세 13993 7075 6918 521 272 249 2173 1100 1073 ... 1318 1685 874 811 2954 1483 1471 2735 1362 1373
1 1세 16306 8442 7864 548 278 270 2569 1365 1204 ... 1550 2097 1060 1037 3627 1959 1668 2968 1521 1447
2 2세 18774 9576 9198 656 325 331 2875 1433 1442 ... 1791 2484 1313 1171 4160 2185 1975 3282 1624 1658
3 3세 20010 10252 9758 639 324 315 3055 1592 1463 ... 1863 2858 1477 1381 4623 2363 2260 3264 1629 1635
4 4세 20020 10219 9801 594 310 284 3055 1541 1514 ... 1838 3106 1592 1514 4571 2334 2237 3208 1622 1586

5 rows × 28 columns

In [95]:
df2 =population_02.copy()
In [96]:
drop_list = []
check_list = ['총계', '구분', ' 남', ' 여'] # 남구 삭제 방지를 위해 '남' 앞에 공백 추가 
for chk in check_list:
    for item in df2.columns :
        if  chk in item:
            drop_list.append(item)
drop_list = list(set(drop_list)) #  중복 제거를 위해 set을 사용
df2_1 = df2.drop(drop_list,axis=1)
df2_1['인구'] = (pd.DataFrame(range(0,101))/10).astype(int)*10
df2_1['인구'] = np.where(df2_1['인구'] >= 70, 70, df2_1.인구)
df2_1 = df2_1.groupby('인구')
df2_1 = df2_1.sum()
df2_1
Out[96]:
중구 계 동구 계 서구 계 남구 계 북구 계 수성구 계 달서구 계 달성군 계
인구
0 5744 28571 9287 7520 36774 31851 45262 29944
10 5583 29313 13294 10849 48006 56785 62415 23427
20 11670 43532 24698 20423 60735 57599 82364 29824
30 11653 48399 20686 18483 57192 45823 72346 43396
40 11368 53666 26316 21908 76298 77586 96358 40770
50 12107 59146 37819 26357 75980 74581 105563 39590
60 10215 47617 29113 22849 46874 47295 63772 25015
70 11061 41047 23159 22112 37630 41239 45333 18577

2019.06.30.기준 대구광역시 주민등록인구 현황

In [97]:
population_03 = pd.read_csv('data/2019.06.30.기준 대구광역시 주민등록인구 현황_UTF8.csv',thousands=',')
population_03.head()
Out[97]:
행정구역 총계 총계 남 총계 여 중구 계 중구 남 중구 여 동구 계 동구 남 동구 여 ... 북구 여 수성구 계 수성구 남 수성구 여 달서구 계 달서구 남 달서구 여 달성군 계 달성군 남 달성군 여
0 0세 13085 6754 6331 456 228 228 2019 1021 998 ... 1221 1565 839 726 2771 1413 1358 2660 1358 1302
1 1세 15384 7854 7530 524 273 251 2401 1235 1166 ... 1434 1964 986 978 3370 1780 1590 2885 1429 1456
2 2세 17580 9026 8554 588 293 295 2718 1429 1289 ... 1682 2387 1217 1170 3836 2028 1808 3138 1579 1559
3 3세 19659 10028 9631 625 325 300 2947 1442 1505 ... 1848 2839 1501 1338 4480 2313 2167 3362 1701 1661
4 4세 20230 10294 9936 628 297 331 3103 1620 1483 ... 1858 3069 1536 1533 4710 2388 2322 3260 1641 1619

5 rows × 28 columns

In [98]:
df3 =population_03.copy()
In [99]:
drop_list = []
check_list = ['총계', '행정구역', ' 남', ' 여'] # 남구 삭제 방지를 위해 '남' 앞에 공백 추가 
for chk in check_list:
    for item in df3.columns :
        if  chk in item:
            drop_list.append(item)
drop_list = list(set(drop_list)) #  중복 제거를 위해 set을 사용

df3_1 = df3.drop(drop_list,axis=1)
df3_1['인구'] = (pd.DataFrame(range(0,101))/10).astype(int)*10
df3_1['인구'] = np.where(df3_1['인구'] >= 70, 70, df3_1.인구)
df3_1 = df3_1.groupby('인구')
df3_1 = df3_1.sum()
df3_1
Out[99]:
중구 계 동구 계 서구 계 남구 계 북구 계 수성구 계 달서구 계 달성군 계
인구
0 5572 27937 8765 7221 36116 31376 44236 30293
10 5370 28629 12665 10462 46834 55090 60556 23621
20 11620 42833 23711 20327 60691 56987 81862 29765
30 11311 47415 19635 17871 56384 45226 71171 43412
40 11108 52960 25199 21400 75095 76047 94565 41490
50 11798 58640 36882 26010 76729 74962 105716 40356
60 10069 48272 29378 22886 48297 48484 66056 26081
70 11087 42139 23685 22505 38947 42309 47141 19221

3개의 기간동안 인구가 증가하는 곳을 찾는다

In [100]:
df1 = df1.T
df1['총합'] = df1.sum(axis=1).astype(int)
df1
Out[100]:
인구 0 10 20 30 40 50 60 70 총합
중구 계 5674 5549 11300 11396 11358 12107 10243 10903 78530
동구 계 29075 29903 43608 48971 54564 59064 46790 39917 351892
서구 계 9719 14006 25542 21529 27671 38473 29106 22659 188705
남구 계 7797 11162 20608 18912 22502 26615 22642 21652 151890
북구 계 37401 48985 61021 57670 77961 75014 45549 36541 440142
수성구 계 32508 57880 58097 46528 79395 74095 46530 40435 435468
달서구 계 46276 63987 82987 72962 98641 104487 61842 43938 575120
달성군 계 29751 23382 29853 43404 40726 38816 23984 17954 247870
In [101]:
df2_1 = df2_1.T
df2_1['총합'] = df2_1.sum(axis=1).astype(int)
df2_1
Out[101]:
인구 0 10 20 30 40 50 60 70 총합
중구 계 5744 5583 11670 11653 11368 12107 10215 11061 79401
동구 계 28571 29313 43532 48399 53666 59146 47617 41047 351291
서구 계 9287 13294 24698 20686 26316 37819 29113 23159 184372
남구 계 7520 10849 20423 18483 21908 26357 22849 22112 150501
북구 계 36774 48006 60735 57192 76298 75980 46874 37630 439489
수성구 계 31851 56785 57599 45823 77586 74581 47295 41239 432759
달서구 계 45262 62415 82364 72346 96358 105563 63772 45333 573413
달성군 계 29944 23427 29824 43396 40770 39590 25015 18577 250543
In [102]:
df3_1 = df3_1.T
df3_1['총합'] = df3_1.sum(axis=1).astype(int)
df3_1
Out[102]:
인구 0 10 20 30 40 50 60 70 총합
중구 계 5572 5370 11620 11311 11108 11798 10069 11087 77935
동구 계 27937 28629 42833 47415 52960 58640 48272 42139 348825
서구 계 8765 12665 23711 19635 25199 36882 29378 23685 179920
남구 계 7221 10462 20327 17871 21400 26010 22886 22505 148682
북구 계 36116 46834 60691 56384 75095 76729 48297 38947 439093
수성구 계 31376 55090 56987 45226 76047 74962 48484 42309 430481
달서구 계 44236 60556 81862 71171 94565 105716 66056 47141 571303
달성군 계 30293 23621 29765 43412 41490 40356 26081 19221 254239
In [103]:
pop1 = (df2_1['총합'] - df1['총합']) > 0
pop2 = (df3_1['총합'] - df2_1['총합']) > 0
df3_1['인구증가'] = pop1 & pop2
df3_1
Out[103]:
인구 0 10 20 30 40 50 60 70 총합 인구증가
중구 계 5572 5370 11620 11311 11108 11798 10069 11087 77935 False
동구 계 27937 28629 42833 47415 52960 58640 48272 42139 348825 False
서구 계 8765 12665 23711 19635 25199 36882 29378 23685 179920 False
남구 계 7221 10462 20327 17871 21400 26010 22886 22505 148682 False
북구 계 36116 46834 60691 56384 75095 76729 48297 38947 439093 False
수성구 계 31376 55090 56987 45226 76047 74962 48484 42309 430481 False
달서구 계 44236 60556 81862 71171 94565 105716 66056 47141 571303 False
달성군 계 30293 23621 29765 43412 41490 40356 26081 19221 254239 True
In [104]:
df3_1[df3_1.인구증가 == True]
Out[104]:
인구 0 10 20 30 40 50 60 70 총합 인구증가
달성군 계 30293 23621 29765 43412 41490 40356 26081 19221 254239 True

4. 다음조건 찾기

  • 남성인구 > 여성인구
  • 인구수 > 20만
In [105]:
df = population_01.copy()
In [106]:
#공통제거
drop_list = []
check_list = ['총계', '구분',]
for chk in check_list:
    for item in df.columns :
        if  chk in item:
            drop_list.append(item)
drop_list = list(set(drop_list)) #  중복 제거를 위해 set을 사용
In [107]:
df = df.drop(drop_list, axis=1)
In [108]:
df['인구'] = (pd.DataFrame(range(0,101))/10).astype(int)*10
df['인구'] = np.where(df['인구'] >= 70, 70, df.인구)
df = df.groupby('인구')
df = df.sum()
df = df.T
df['총합'] = df.sum(axis='columns').astype(int)
df = df.T
df
Out[108]:
중구 계 중구 남 중구 여 동구 계 동구 남 동구 여 서구 계 서구 남 서구 여 남구 계 ... 북구 여 수성구 계 수성구 남 수성구 여 달서구 계 달서구 남 달서구 여 달성군 계 달성군 남 달성군 여
인구
0 5674 2952 2722 29075 14987 14088 9719 4936 4783 7797 ... 18260 32508 16713 15795 46276 23865 22411 29751 15132 14619
10 5549 2801 2748 29903 15815 14088 14006 7406 6600 11162 ... 23284 57880 30792 27088 63987 33506 30481 23382 12302 11080
20 11300 5611 5689 43608 23707 19901 25542 14240 11302 20608 ... 27737 58097 31464 26633 82987 45010 37977 29853 16533 13320
30 11396 5877 5519 48971 25221 23750 21529 11920 9609 18912 ... 28127 46528 22290 24238 72962 37075 35887 43404 22386 21018
40 11358 5868 5490 54564 28261 26303 27671 14669 13002 22502 ... 39635 79395 36264 43131 98641 47547 51094 40726 21246 19480
50 12107 6000 6107 59064 28461 30603 38473 19174 19299 26615 ... 37602 74095 36270 37825 104487 50800 53687 38816 19554 19262
60 10243 4642 5601 46790 21842 24948 29106 13749 15357 22642 ... 23545 46530 21938 24592 61842 30114 31728 23984 11985 11999
70 10903 4343 6560 39917 16048 23869 22659 9023 13636 21652 ... 22217 40435 16218 24217 43938 17326 26612 17954 7004 10950
총합 78530 38094 40436 351892 174342 177550 188705 95117 93588 151890 ... 220407 435468 211949 223519 575120 285243 289877 247870 126142 121728

9 rows × 24 columns

In [109]:
#남자만 뽑기
drop_list = []
check_list = [' 계', ' 여']
for chk in check_list:
    for item in df.columns :
        if  chk in item:
            drop_list.append(item)
drop_list = list(set(drop_list)) #  중복 제거를 위해 set을 사용
#drop_list
In [110]:
ex4_df1_M = df.drop(drop_list, axis=1)
ex4_df1_M = ex4_df1_M.T
ex4_df1_M
Out[110]:
인구 0 10 20 30 40 50 60 70 총합
중구 남 2952 2801 5611 5877 5868 6000 4642 4343 38094
동구 남 14987 15815 23707 25221 28261 28461 21842 16048 174342
서구 남 4936 7406 14240 11920 14669 19174 13749 9023 95117
남구 남 3986 5829 10837 9790 11423 12691 10382 8566 73504
북구 남 19141 25701 33284 29543 38326 37412 22004 14324 219735
수성구 남 16713 30792 31464 22290 36264 36270 21938 16218 211949
달서구 남 23865 33506 45010 37075 47547 50800 30114 17326 285243
달성군 남 15132 12302 16533 22386 21246 19554 11985 7004 126142
In [111]:
#여자만 뽑기
drop_list = []
check_list = [' 계', ' 남']
for chk in check_list:
    for item in df.columns :
        if  chk in item:
            drop_list.append(item)
drop_list = list(set(drop_list)) #  중복 제거를 위해 set을 사용
#drop_list
In [112]:
ex4_df1_F = df.drop(drop_list, axis=1)
ex4_df1_F = ex4_df1_F.T
ex4_df1_F 
Out[112]:
인구 0 10 20 30 40 50 60 70 총합
중구 여 2722 2748 5689 5519 5490 6107 5601 6560 40436
동구 여 14088 14088 19901 23750 26303 30603 24948 23869 177550
서구 여 4783 6600 11302 9609 13002 19299 15357 13636 93588
남구 여 3811 5333 9771 9122 11079 13924 12260 13086 78386
북구 여 18260 23284 27737 28127 39635 37602 23545 22217 220407
수성구 여 15795 27088 26633 24238 43131 37825 24592 24217 223519
달서구 여 22411 30481 37977 35887 51094 53687 31728 26612 289877
달성군 여 14619 11080 13320 21018 19480 19262 11999 10950 121728
In [113]:
#합계만 뽑기
drop_list = []
check_list = [' 남', ' 여']
for chk in check_list:
    for item in df.columns :
        if  chk in item:
            drop_list.append(item)
drop_list = list(set(drop_list)) #  중복 제거를 위해 set을 사용
#drop_list
In [114]:
ex4_df1_T = df.drop(drop_list, axis=1)
ex4_df1_T = ex4_df1_T.T
ex4_df1_T
Out[114]:
인구 0 10 20 30 40 50 60 70 총합
중구 계 5674 5549 11300 11396 11358 12107 10243 10903 78530
동구 계 29075 29903 43608 48971 54564 59064 46790 39917 351892
서구 계 9719 14006 25542 21529 27671 38473 29106 22659 188705
남구 계 7797 11162 20608 18912 22502 26615 22642 21652 151890
북구 계 37401 48985 61021 57670 77961 75014 45549 36541 440142
수성구 계 32508 57880 58097 46528 79395 74095 46530 40435 435468
달서구 계 46276 63987 82987 72962 98641 104487 61842 43938 575120
달성군 계 29751 23382 29853 43404 40726 38816 23984 17954 247870
In [115]:
ex4_df1_T['남초여부'] = (ex4_df1_M['총합'].values > ex4_df1_F['총합'].values) 
# result = (ex4_df1_M['총합'].values > ex4_df1_F['총합'].values) > 0
# index = ex4_df1_T.index
# obj = pd.Series(result, index=index)
# ex4_df1_T['남초여부'] = obj
ex4_df1_T
Out[115]:
인구 0 10 20 30 40 50 60 70 총합 남초여부
중구 계 5674 5549 11300 11396 11358 12107 10243 10903 78530 False
동구 계 29075 29903 43608 48971 54564 59064 46790 39917 351892 False
서구 계 9719 14006 25542 21529 27671 38473 29106 22659 188705 True
남구 계 7797 11162 20608 18912 22502 26615 22642 21652 151890 False
북구 계 37401 48985 61021 57670 77961 75014 45549 36541 440142 False
수성구 계 32508 57880 58097 46528 79395 74095 46530 40435 435468 False
달서구 계 46276 63987 82987 72962 98641 104487 61842 43938 575120 False
달성군 계 29751 23382 29853 43404 40726 38816 23984 17954 247870 True
In [116]:
case1 = ex4_df1_T['남초여부'] == True 
case2 = ex4_df1_T['총합']> 200000
case = case1 & case2
ex4_df1_T['결과'] = case
ex4_df1_T
Out[116]:
인구 0 10 20 30 40 50 60 70 총합 남초여부 결과
중구 계 5674 5549 11300 11396 11358 12107 10243 10903 78530 False False
동구 계 29075 29903 43608 48971 54564 59064 46790 39917 351892 False False
서구 계 9719 14006 25542 21529 27671 38473 29106 22659 188705 True False
남구 계 7797 11162 20608 18912 22502 26615 22642 21652 151890 False False
북구 계 37401 48985 61021 57670 77961 75014 45549 36541 440142 False False
수성구 계 32508 57880 58097 46528 79395 74095 46530 40435 435468 False False
달서구 계 46276 63987 82987 72962 98641 104487 61842 43938 575120 False False
달성군 계 29751 23382 29853 43404 40726 38816 23984 17954 247870 True True
In [117]:
ex4_df1_T[ex4_df1_T['결과'] == True]
Out[117]:
인구 0 10 20 30 40 50 60 70 총합 남초여부 결과
달성군 계 29751 23382 29853 43404 40726 38816 23984 17954 247870 True True
In [118]:
ex4_df1_T = ex4_df1_T.T
ex4_df1_T
Out[118]:
중구 계 동구 계 서구 계 남구 계 북구 계 수성구 계 달서구 계 달성군 계
인구
0 5674 29075 9719 7797 37401 32508 46276 29751
10 5549 29903 14006 11162 48985 57880 63987 23382
20 11300 43608 25542 20608 61021 58097 82987 29853
30 11396 48971 21529 18912 57670 46528 72962 43404
40 11358 54564 27671 22502 77961 79395 98641 40726
50 12107 59064 38473 26615 75014 74095 104487 38816
60 10243 46790 29106 22642 45549 46530 61842 23984
70 10903 39917 22659 21652 36541 40435 43938 17954
총합 78530 351892 188705 151890 440142 435468 575120 247870
남초여부 False False True False False False False True
결과 False False False False False False False True

컬럼 이름 변경

  1. 새로운 리스트로 덮어씀
In [119]:
ex4_df1_T.columns = ['중구','동구','서구','남구','북구','수성구','달서구','달성군']
ex4_df1_T
Out[119]:
중구 동구 서구 남구 북구 수성구 달서구 달성군
인구
0 5674 29075 9719 7797 37401 32508 46276 29751
10 5549 29903 14006 11162 48985 57880 63987 23382
20 11300 43608 25542 20608 61021 58097 82987 29853
30 11396 48971 21529 18912 57670 46528 72962 43404
40 11358 54564 27671 22502 77961 79395 98641 40726
50 12107 59064 38473 26615 75014 74095 104487 38816
60 10243 46790 29106 22642 45549 46530 61842 23984
70 10903 39917 22659 21652 36541 40435 43938 17954
총합 78530 351892 188705 151890 440142 435468 575120 247870
남초여부 False False True False False False False True
결과 False False False False False False False True
  1. replace를 사용하여 이름 명 변경(대체)
In [120]:
ex4_df1_T.columns = ex4_df1_T.columns.str.replace("구","구 계")
ex4_df1_T
Out[120]:
중구 계 동구 계 서구 계 남구 계 북구 계 수성구 계 달서구 계 달성군
인구
0 5674 29075 9719 7797 37401 32508 46276 29751
10 5549 29903 14006 11162 48985 57880 63987 23382
20 11300 43608 25542 20608 61021 58097 82987 29853
30 11396 48971 21529 18912 57670 46528 72962 43404
40 11358 54564 27671 22502 77961 79395 98641 40726
50 12107 59064 38473 26615 75014 74095 104487 38816
60 10243 46790 29106 22642 45549 46530 61842 23984
70 10903 39917 22659 21652 36541 40435 43938 17954
총합 78530 351892 188705 151890 440142 435468 575120 247870
남초여부 False False True False False False False True
결과 False False False False False False False True
  1. 각각 이름 변경시 rename을 사용
In [121]:
ex4_df1_T = ex4_df1_T.rename({'중구 계':'대구중구'}, axis='columns')
ex4_df1_T
Out[121]:
대구중구 동구 계 서구 계 남구 계 북구 계 수성구 계 달서구 계 달성군
인구
0 5674 29075 9719 7797 37401 32508 46276 29751
10 5549 29903 14006 11162 48985 57880 63987 23382
20 11300 43608 25542 20608 61021 58097 82987 29853
30 11396 48971 21529 18912 57670 46528 72962 43404
40 11358 54564 27671 22502 77961 79395 98641 40726
50 12107 59064 38473 26615 75014 74095 104487 38816
60 10243 46790 29106 22642 45549 46530 61842 23984
70 10903 39917 22659 21652 36541 40435 43938 17954
총합 78530 351892 188705 151890 440142 435468 575120 247870
남초여부 False False True False False False False True
결과 False False False False False False False True

5. 대구광역시의 각 구별 인구수를 정리하여 표시하고 인구가 가장 많은 지역과 가장 적은 지역을 구하여 출력 하라(3개 파일에서 각각 구하라)

In [232]:
#합계만 뽑기
drop_list = []
check_list = [' 남', ' 여']
for chk in check_list:
    for item in df.columns :
        if  chk in item:
            drop_list.append(item)
drop_list = list(set(drop_list)) #  중복 제거를 위해 set을 사용
#drop_list
In [233]:
df1_T = df.drop(drop_list, axis=1)
df1_T = df1_T.T
df1_T
Out[233]:
인구 0 10 20 30 40 50 60 70 총합
중구 계 5674 5549 11300 11396 11358 12107 10243 10903 78530
동구 계 29075 29903 43608 48971 54564 59064 46790 39917 351892
서구 계 9719 14006 25542 21529 27671 38473 29106 22659 188705
남구 계 7797 11162 20608 18912 22502 26615 22642 21652 151890
북구 계 37401 48985 61021 57670 77961 75014 45549 36541 440142
수성구 계 32508 57880 58097 46528 79395 74095 46530 40435 435468
달서구 계 46276 63987 82987 72962 98641 104487 61842 43938 575120
달성군 계 29751 23382 29853 43404 40726 38816 23984 17954 247870
In [234]:
df1_T1 =df1_T.copy()
In [240]:
max_1 = df1_T1['총합'].idxmax()
df1_T1[df1_T1.index == max_1 ]
Out[240]:
인구 0 10 20 30 40 50 60 70 총합 최대인구 구
달서구 계 46276 63987 82987 72962 98641 104487 61842 43938 575120 달서구 계
In [241]:
min_1 = df1_T1['총합'].idxmin()
df1_T1[df1_T1.index == min_1 ]
Out[241]:
인구 0 10 20 30 40 50 60 70 총합 최대인구 구
중구 계 5674 5549 11300 11396 11358 12107 10243 10903 78530 달서구 계
In [201]:
max_1 = df1_T['총합'].idxmax() == df1_T1.index
min_1 = df1_T['총합'].idxmin() == df1_T1.index
df1_T1['최대인구 구'] = max_1
df1_T1['최소인구 구'] = min_1
df1_T1
Out[201]:
인구 0 10 20 30 40 50 60 70 총합 최대인구 구 최소인구 구
중구 계 5674 5549 11300 11396 11358 12107 10243 10903 78530 False True
동구 계 29075 29903 43608 48971 54564 59064 46790 39917 351892 False False
서구 계 9719 14006 25542 21529 27671 38473 29106 22659 188705 False False
남구 계 7797 11162 20608 18912 22502 26615 22642 21652 151890 False False
북구 계 37401 48985 61021 57670 77961 75014 45549 36541 440142 False False
수성구 계 32508 57880 58097 46528 79395 74095 46530 40435 435468 False False
달서구 계 46276 63987 82987 72962 98641 104487 61842 43938 575120 True False
달성군 계 29751 23382 29853 43404 40726 38816 23984 17954 247870 False False
In [202]:
df2 =population_02.copy()
In [203]:
#공통제거
drop_list = []
check_list = ['총계', '구분',]
for chk in check_list:
    for item in df2.columns :
        if  chk in item:
            drop_list.append(item)
drop_list = list(set(drop_list)) #  중복 제거를 위해 set을 사용
In [204]:
df2 = df2.drop(drop_list, axis=1)
In [205]:
df2['인구'] = (pd.DataFrame(range(0,101))/10).astype(int)*10
df2['인구'] = np.where(df2['인구'] >= 70, 70, df2.인구)
df2 = df2.groupby('인구')
df2 = df2.sum()
df2 = df2.T
df2['총합'] = df2.sum(axis='columns').astype(int)
df2 = df2.T
df2
Out[205]:
중구 계 중구 남 중구 여 동구 계 동구 남 동구 여 서구 계 서구 남 서구 여 남구 계 ... 북구 여 수성구 계 수성구 남 수성구 여 달서구 계 달서구 남 달서구 여 달성군 계 달성군 남 달성군 여
인구
0 5744 2978 2766 28571 14765 13806 9287 4707 4580 7520 ... 17984 31851 16415 15436 45262 23290 21972 29944 15194 14750
10 5583 2815 2768 29313 15439 13874 13294 7028 6266 10849 ... 22866 56785 30245 26540 62415 32564 29851 23427 12319 11108
20 11670 5764 5906 43532 23636 19896 24698 13701 10997 20423 ... 27621 57599 31132 26467 82364 44525 37839 29824 16481 13343
30 11653 6028 5625 48399 25034 23365 20686 11520 9166 18483 ... 27786 45823 21936 23887 72346 36903 35443 43396 22413 20983
40 11368 5873 5495 53666 27768 25898 26316 14011 12305 21908 ... 38825 77586 35471 42115 96358 46516 49842 40770 21276 19494
50 12107 5988 6119 59146 28535 30611 37819 18840 18979 26357 ... 38142 74581 36489 38092 105563 51225 54338 39590 19897 19693
60 10215 4679 5536 47617 22270 25347 29113 13742 15371 22849 ... 24122 47295 22356 24939 63772 31093 32679 25015 12497 12518
70 11061 4373 6688 41047 16508 24539 23159 9247 13912 22112 ... 22836 41239 16577 24662 45333 18011 27322 18577 7297 11280
총합 79401 38498 40903 351291 173955 177336 184372 92796 91576 150501 ... 220182 432759 210621 222138 573413 284127 289286 250543 127374 123169

9 rows × 24 columns

In [244]:
#합계만 뽑기
drop_list = []
check_list = [' 남', ' 여']
for chk in check_list:
    for item in df2.columns :
        if  chk in item:
            drop_list.append(item)
drop_list = list(set(drop_list)) #  중복 제거를 위해 set을 사용
#drop_list
In [269]:
df2_T = df2.drop(drop_list, axis=1)
df2_T = df2_T.T
df2_T
Out[269]:
인구 0 10 20 30 40 50 60 70 총합
중구 계 5744 5583 11670 11653 11368 12107 10215 11061 79401
동구 계 28571 29313 43532 48399 53666 59146 47617 41047 351291
서구 계 9287 13294 24698 20686 26316 37819 29113 23159 184372
남구 계 7520 10849 20423 18483 21908 26357 22849 22112 150501
북구 계 36774 48006 60735 57192 76298 75980 46874 37630 439489
수성구 계 31851 56785 57599 45823 77586 74581 47295 41239 432759
달서구 계 45262 62415 82364 72346 96358 105563 63772 45333 573413
달성군 계 29944 23427 29824 43396 40770 39590 25015 18577 250543
In [246]:
df2_T2 =df2_T.copy()
In [247]:
max_2 = df2_T2['총합'].idxmax()
df2_T2[df2_T2.index == max_2 ]
Out[247]:
인구 0 10 20 30 40 50 60 70 총합
달서구 계 45262 62415 82364 72346 96358 105563 63772 45333 573413
In [248]:
min_2 = df2_T2['총합'].idxmin()
df2_T2[df2_T2.index == min_2 ]
  
Out[248]:
인구 0 10 20 30 40 50 60 70 총합
중구 계 5744 5583 11670 11653 11368 12107 10215 11061 79401
In [208]:
max_2 = df2_T['총합'].idxmax() == df2_T2.index
min_2 = df2_T['총합'].idxmin() == df2_T2.index
df2_T2['최대인구 구'] = max_2
df2_T2['최소인구 구'] = min_2
df2_T2
Out[208]:
인구 0 10 20 30 40 50 60 70 총합 최대인구 구 최소인구 구
중구 계 5744 5583 11670 11653 11368 12107 10215 11061 79401 False True
동구 계 28571 29313 43532 48399 53666 59146 47617 41047 351291 False False
서구 계 9287 13294 24698 20686 26316 37819 29113 23159 184372 False False
남구 계 7520 10849 20423 18483 21908 26357 22849 22112 150501 False False
북구 계 36774 48006 60735 57192 76298 75980 46874 37630 439489 False False
수성구 계 31851 56785 57599 45823 77586 74581 47295 41239 432759 False False
달서구 계 45262 62415 82364 72346 96358 105563 63772 45333 573413 True False
달성군 계 29944 23427 29824 43396 40770 39590 25015 18577 250543 False False
In [250]:
df3 = population_03.copy() 
In [251]:
#공통제거
drop_list = []
check_list = ['총계', '구분',]
for chk in check_list:
    for item in df3.columns :
        if  chk in item:
            drop_list.append(item)
drop_list = list(set(drop_list)) #  중복 제거를 위해 set을 사용
In [252]:
df3 = df3.drop(drop_list, axis=1)
In [253]:
df3['인구'] = (pd.DataFrame(range(0,101))/10).astype(int)*10
df3['인구'] = np.where(df3['인구'] >= 70, 70, df3.인구)
df3 = df3.groupby('인구')
df3 = df3.sum()
df3 = df3.T
df3['총합'] = df3.sum(axis='columns').astype(int)
df3 = df3.T
df3
Out[253]:
중구 계 중구 남 중구 여 동구 계 동구 남 동구 여 서구 계 서구 남 서구 여 남구 계 ... 북구 여 수성구 계 수성구 남 수성구 여 달서구 계 달서구 남 달서구 여 달성군 계 달성군 남 달성군 여
인구
0 5572 2855 2717 27937 14401 13536 8765 4443 4322 7221 ... 17605 31376 16144 15232 44236 22726 21510 30293 15404 14889
10 5370 2705 2665 28629 15069 13560 12665 6683 5982 10462 ... 22372 55090 29299 25791 60556 31529 29027 23621 12396 11225
20 11620 5714 5906 42833 23142 19691 23711 13079 10632 20327 ... 27671 56987 30778 26209 81862 44109 37753 29765 16427 13338
30 11311 5836 5475 47415 24603 22812 19635 10977 8658 17871 ... 27225 45226 21812 23414 71171 36515 34656 43412 22487 20925
40 11108 5695 5413 52960 27422 25538 25199 13470 11729 21400 ... 38228 76047 34718 41329 94565 45710 48855 41490 21640 19850
50 11798 5825 5973 58640 28290 30350 36882 18430 18452 26010 ... 38585 74962 36596 38366 105716 51170 54546 40356 20164 20192
60 10069 4649 5420 48272 22488 25784 29378 13856 15522 22886 ... 24784 48484 22900 25584 66056 32130 33926 26081 13063 13018
70 11087 4382 6705 42139 16986 25153 23685 9481 14204 22505 ... 23595 42309 17001 25308 47141 18867 28274 19221 7652 11569
총합 77935 37661 40274 348825 172401 176424 179920 90419 89501 148682 ... 220065 430481 209248 221233 571303 282756 288547 254239 129233 125006

9 rows × 24 columns

In [254]:
drop_list = []
check_list = [' 남', ' 여']
for chk in check_list:
    for item in df3.columns :
        if  chk in item:
            drop_list.append(item)
drop_list = list(set(drop_list)) #  중복 제거를 위해 set을 사용
#drop_list
In [274]:
df3_T = df3.drop(drop_list, axis=1)
df3_T = df3_T.T
df3_T
Out[274]:
인구 0 10 20 30 40 50 60 70 총합
중구 계 5572 5370 11620 11311 11108 11798 10069 11087 77935
동구 계 27937 28629 42833 47415 52960 58640 48272 42139 348825
서구 계 8765 12665 23711 19635 25199 36882 29378 23685 179920
남구 계 7221 10462 20327 17871 21400 26010 22886 22505 148682
북구 계 36116 46834 60691 56384 75095 76729 48297 38947 439093
수성구 계 31376 55090 56987 45226 76047 74962 48484 42309 430481
달서구 계 44236 60556 81862 71171 94565 105716 66056 47141 571303
달성군 계 30293 23621 29765 43412 41490 40356 26081 19221 254239
In [258]:
df3_T3 =df3_T.copy()
In [259]:
max_3 = df3_T['총합'].idxmax()
df3_T3[df3_T3.index == max_3 ]
Out[259]:
인구 0 10 20 30 40 50 60 70 총합
달서구 계 44236 60556 81862 71171 94565 105716 66056 47141 571303
In [260]:
min_3 = df3_T3['총합'].idxmin()
df3_T3[df3_T3.index == min_1 ]
Out[260]:
인구 0 10 20 30 40 50 60 70 총합
중구 계 5572 5370 11620 11311 11108 11798 10069 11087 77935
In [215]:
max_3 = df3_T['총합'].idxmax() == df3_T.index
min_3 = df3_T['총합'].idxmin() == df3_T.index
df3_T['최대인구 구'] = max_3
df3_T['최소인구 구'] = min_3
df3_T
Out[215]:
인구 0 10 20 30 40 50 60 70 총합 최대인구 구 최소인구 구
중구 계 5572 5370 11620 11311 11108 11798 10069 11087 77935 False True
동구 계 27937 28629 42833 47415 52960 58640 48272 42139 348825 False False
서구 계 8765 12665 23711 19635 25199 36882 29378 23685 179920 False False
남구 계 7221 10462 20327 17871 21400 26010 22886 22505 148682 False False
북구 계 36116 46834 60691 56384 75095 76729 48297 38947 439093 False False
수성구 계 31376 55090 56987 45226 76047 74962 48484 42309 430481 False False
달서구 계 44236 60556 81862 71171 94565 105716 66056 47141 571303 True False
달성군 계 30293 23621 29765 43412 41490 40356 26081 19221 254239 False False

6. 대구광역시의 각 구별 20대 대비 60세 이상의 인구 비율을 구하여 출력하고 이 비율이 가장 높은 지역을 구하여 출력하라

In [265]:
df1_T
Out[265]:
인구 0 10 20 30 40 50 60 70 총합
중구 계 5674 5549 11300 11396 11358 12107 10243 10903 78530
동구 계 29075 29903 43608 48971 54564 59064 46790 39917 351892
서구 계 9719 14006 25542 21529 27671 38473 29106 22659 188705
남구 계 7797 11162 20608 18912 22502 26615 22642 21652 151890
북구 계 37401 48985 61021 57670 77961 75014 45549 36541 440142
수성구 계 32508 57880 58097 46528 79395 74095 46530 40435 435468
달서구 계 46276 63987 82987 72962 98641 104487 61842 43938 575120
달성군 계 29751 23382 29853 43404 40726 38816 23984 17954 247870
In [266]:
df1_T['60대이상'] = (df1_T[60] + df1_T[70]).astype(int)
df1_T
Out[266]:
인구 0 10 20 30 40 50 60 70 총합 60대이상
중구 계 5674 5549 11300 11396 11358 12107 10243 10903 78530 21146
동구 계 29075 29903 43608 48971 54564 59064 46790 39917 351892 86707
서구 계 9719 14006 25542 21529 27671 38473 29106 22659 188705 51765
남구 계 7797 11162 20608 18912 22502 26615 22642 21652 151890 44294
북구 계 37401 48985 61021 57670 77961 75014 45549 36541 440142 82090
수성구 계 32508 57880 58097 46528 79395 74095 46530 40435 435468 86965
달서구 계 46276 63987 82987 72962 98641 104487 61842 43938 575120 105780
달성군 계 29751 23382 29853 43404 40726 38816 23984 17954 247870 41938
In [267]:
df1_T['rate'] = round((df1_T['60대이상']/df1_T[20])*100,1)
df1_T
Out[267]:
인구 0 10 20 30 40 50 60 70 총합 60대이상 rate
중구 계 5674 5549 11300 11396 11358 12107 10243 10903 78530 21146 187.1
동구 계 29075 29903 43608 48971 54564 59064 46790 39917 351892 86707 198.8
서구 계 9719 14006 25542 21529 27671 38473 29106 22659 188705 51765 202.7
남구 계 7797 11162 20608 18912 22502 26615 22642 21652 151890 44294 214.9
북구 계 37401 48985 61021 57670 77961 75014 45549 36541 440142 82090 134.5
수성구 계 32508 57880 58097 46528 79395 74095 46530 40435 435468 86965 149.7
달서구 계 46276 63987 82987 72962 98641 104487 61842 43938 575120 105780 127.5
달성군 계 29751 23382 29853 43404 40726 38816 23984 17954 247870 41938 140.5
In [268]:
max_6_1 = df1_T['rate'].idxmax()
df1_T[df1_T.index == max_6_1 ]
Out[268]:
인구 0 10 20 30 40 50 60 70 총합 60대이상 rate
남구 계 7797 11162 20608 18912 22502 26615 22642 21652 151890 44294 214.9
In [270]:
df2_T
Out[270]:
인구 0 10 20 30 40 50 60 70 총합
중구 계 5744 5583 11670 11653 11368 12107 10215 11061 79401
동구 계 28571 29313 43532 48399 53666 59146 47617 41047 351291
서구 계 9287 13294 24698 20686 26316 37819 29113 23159 184372
남구 계 7520 10849 20423 18483 21908 26357 22849 22112 150501
북구 계 36774 48006 60735 57192 76298 75980 46874 37630 439489
수성구 계 31851 56785 57599 45823 77586 74581 47295 41239 432759
달서구 계 45262 62415 82364 72346 96358 105563 63772 45333 573413
달성군 계 29944 23427 29824 43396 40770 39590 25015 18577 250543
In [271]:
df2_T['60대이상'] = (df2_T[60] + df2_T[70]).astype(int)
df2_T
Out[271]:
인구 0 10 20 30 40 50 60 70 총합 60대이상
중구 계 5744 5583 11670 11653 11368 12107 10215 11061 79401 21276
동구 계 28571 29313 43532 48399 53666 59146 47617 41047 351291 88664
서구 계 9287 13294 24698 20686 26316 37819 29113 23159 184372 52272
남구 계 7520 10849 20423 18483 21908 26357 22849 22112 150501 44961
북구 계 36774 48006 60735 57192 76298 75980 46874 37630 439489 84504
수성구 계 31851 56785 57599 45823 77586 74581 47295 41239 432759 88534
달서구 계 45262 62415 82364 72346 96358 105563 63772 45333 573413 109105
달성군 계 29944 23427 29824 43396 40770 39590 25015 18577 250543 43592
In [272]:
df2_T['rate'] = round((df2_T['60대이상']/df2_T[20])*100,1)
df2_T
Out[272]:
인구 0 10 20 30 40 50 60 70 총합 60대이상 rate
중구 계 5744 5583 11670 11653 11368 12107 10215 11061 79401 21276 182.3
동구 계 28571 29313 43532 48399 53666 59146 47617 41047 351291 88664 203.7
서구 계 9287 13294 24698 20686 26316 37819 29113 23159 184372 52272 211.6
남구 계 7520 10849 20423 18483 21908 26357 22849 22112 150501 44961 220.1
북구 계 36774 48006 60735 57192 76298 75980 46874 37630 439489 84504 139.1
수성구 계 31851 56785 57599 45823 77586 74581 47295 41239 432759 88534 153.7
달서구 계 45262 62415 82364 72346 96358 105563 63772 45333 573413 109105 132.5
달성군 계 29944 23427 29824 43396 40770 39590 25015 18577 250543 43592 146.2
In [273]:
max_6_2 = df2_T['rate'].idxmax()
df2_T[df2_T.index == max_6_2 ]
Out[273]:
인구 0 10 20 30 40 50 60 70 총합 60대이상 rate
남구 계 7520 10849 20423 18483 21908 26357 22849 22112 150501 44961 220.1
In [275]:
df3_T
Out[275]:
인구 0 10 20 30 40 50 60 70 총합
중구 계 5572 5370 11620 11311 11108 11798 10069 11087 77935
동구 계 27937 28629 42833 47415 52960 58640 48272 42139 348825
서구 계 8765 12665 23711 19635 25199 36882 29378 23685 179920
남구 계 7221 10462 20327 17871 21400 26010 22886 22505 148682
북구 계 36116 46834 60691 56384 75095 76729 48297 38947 439093
수성구 계 31376 55090 56987 45226 76047 74962 48484 42309 430481
달서구 계 44236 60556 81862 71171 94565 105716 66056 47141 571303
달성군 계 30293 23621 29765 43412 41490 40356 26081 19221 254239
In [276]:
df3_T['60대이상'] = (df3_T[60] + df3_T[70]).astype(int)
df3_T
Out[276]:
인구 0 10 20 30 40 50 60 70 총합 60대이상
중구 계 5572 5370 11620 11311 11108 11798 10069 11087 77935 21156
동구 계 27937 28629 42833 47415 52960 58640 48272 42139 348825 90411
서구 계 8765 12665 23711 19635 25199 36882 29378 23685 179920 53063
남구 계 7221 10462 20327 17871 21400 26010 22886 22505 148682 45391
북구 계 36116 46834 60691 56384 75095 76729 48297 38947 439093 87244
수성구 계 31376 55090 56987 45226 76047 74962 48484 42309 430481 90793
달서구 계 44236 60556 81862 71171 94565 105716 66056 47141 571303 113197
달성군 계 30293 23621 29765 43412 41490 40356 26081 19221 254239 45302
In [277]:
df3_T['rate'] = round((df3_T['60대이상']/df3_T[20])*100,1)
df3_T
Out[277]:
인구 0 10 20 30 40 50 60 70 총합 60대이상 rate
중구 계 5572 5370 11620 11311 11108 11798 10069 11087 77935 21156 182.1
동구 계 27937 28629 42833 47415 52960 58640 48272 42139 348825 90411 211.1
서구 계 8765 12665 23711 19635 25199 36882 29378 23685 179920 53063 223.8
남구 계 7221 10462 20327 17871 21400 26010 22886 22505 148682 45391 223.3
북구 계 36116 46834 60691 56384 75095 76729 48297 38947 439093 87244 143.8
수성구 계 31376 55090 56987 45226 76047 74962 48484 42309 430481 90793 159.3
달서구 계 44236 60556 81862 71171 94565 105716 66056 47141 571303 113197 138.3
달성군 계 30293 23621 29765 43412 41490 40356 26081 19221 254239 45302 152.2
In [278]:
max_6_3 = df3_T['rate'].idxmax()
df3_T[df3_T.index == max_6_3 ]
Out[278]:
인구 0 10 20 30 40 50 60 70 총합 60대이상 rate
서구 계 8765 12665 23711 19635 25199 36882 29378 23685 179920 53063 223.8

+ Recent posts