In [1]:
#Import Libraries
import numpy as np
import pandas as pd
import geopandas as gpd
from shapely.geometry import Point, Polygon
import json
import requests
import math
import os
import time
import datetime
In [2]:
# Import folders
data_folder = os.path.abspath('data')
# Set Output Folder
output_folder = os.path.abspath("output")
if not os.path.exists(output_folder):
    os.makedirs(output_folder)
In [3]:
# Read Constituency Data
ac_gdf = None
ac_filepath = os.path.join(data_folder, "AC", "India_AC.shp")
ac_gdf = gpd.read_file(ac_filepath)
ac_gdf

# Read Constituency Data
ac_file = os.path.join(data_folder, "General_Later_Ashoka_alldata.csv")
acdf = pd.read_csv(ac_file)
acdf['state_name'] = acdf['state_name'].str.replace("_", " ")
#acdf = acdf[['state_name', 'constituency_no', 'constituency_name', 'year', 'month']]
acdf = acdf.drop_duplicates(subset=None, keep="first", inplace=False).reset_index(drop=True)
acdf.loc[acdf['newstate_code'] == 36, 'newstate_code'] = 28 #Telangana  Fix
acdf = acdf[['state_name', 'state_code', 'constituency_no', 'year', 'month']]
acdf['day'] = 1
acdf['dyear'] = 0
acdf.loc[(acdf['month'] > 9) | (acdf['year'] == 2008), 'dyear'] = 1
acdf['dyear'] = acdf['year'] + acdf['dyear']
acdf['datetime'] = pd.to_datetime(acdf[['year', 'month', 'day']])
acdf = acdf.drop_duplicates().reset_index(drop=True)
acdf = pd.merge(acdf, ac_gdf,  how='inner', left_on=['state_code', 'constituency_no'], right_on = ['ST_CODE','AC_NO'])#[['ST_CODE', 'ST_NAME','DT_CODE', 'DIST_NAME', 'AC_NO', 'AC_NAME', 'PC_NO', 'PC_NAME']]
acdf = acdf[acdf.columns[:-5]]
acdf
Out[3]:
state_name state_code constituency_no year month day dyear datetime OBJECTID ST_CODE ST_NAME DT_CODE DIST_NAME AC_NO AC_NAME PC_NO PC_NAME
0 Jammu & Kashmir 1 1 2008 12 1 2009 2008-12-01 1 1 JAMMU & KASHMIR 1.0 KUPWARA 1 KARNAH 1 BARAMULLA
1 Jammu & Kashmir 1 1 2014 12 1 2015 2014-12-01 1 1 JAMMU & KASHMIR 1.0 KUPWARA 1 KARNAH 1 BARAMULLA
2 Jammu & Kashmir 1 2 2008 12 1 2009 2008-12-01 1 1 JAMMU & KASHMIR 1.0 KUPWARA 2 KUPWARA 1 BARAMULLA
3 Jammu & Kashmir 1 2 2014 12 1 2015 2014-12-01 1 1 JAMMU & KASHMIR 1.0 KUPWARA 2 KUPWARA 1 BARAMULLA
4 Jammu & Kashmir 1 3 2008 12 1 2009 2008-12-01 1 1 JAMMU & KASHMIR 1.0 KUPWARA 3 LOLAB 1 BARAMULLA
5 Jammu & Kashmir 1 3 2014 12 1 2015 2014-12-01 1 1 JAMMU & KASHMIR 1.0 KUPWARA 3 LOLAB 1 BARAMULLA
6 Jammu & Kashmir 1 4 2008 12 1 2009 2008-12-01 1 1 JAMMU & KASHMIR 1.0 KUPWARA 4 HANDWARA 1 BARAMULLA
7 Jammu & Kashmir 1 4 2014 12 1 2015 2014-12-01 1 1 JAMMU & KASHMIR 1.0 KUPWARA 4 HANDWARA 1 BARAMULLA
8 Jammu & Kashmir 1 5 2008 12 1 2009 2008-12-01 1 1 JAMMU & KASHMIR 1.0 KUPWARA 5 LANGATE 1 BARAMULLA
9 Jammu & Kashmir 1 5 2014 12 1 2015 2014-12-01 1 1 JAMMU & KASHMIR 1.0 KUPWARA 5 LANGATE 1 BARAMULLA
10 Jammu & Kashmir 1 6 2008 12 1 2009 2008-12-01 1 1 JAMMU & KASHMIR 2.0 BARAMULA 6 URI 1 BARAMULLA
11 Jammu & Kashmir 1 6 2014 12 1 2015 2014-12-01 1 1 JAMMU & KASHMIR 2.0 BARAMULA 6 URI 1 BARAMULLA
12 Jammu & Kashmir 1 7 2008 12 1 2009 2008-12-01 1 1 JAMMU & KASHMIR 2.0 BARAMULA 7 RAFIABAD 1 BARAMULLA
13 Jammu & Kashmir 1 7 2014 12 1 2015 2014-12-01 1 1 JAMMU & KASHMIR 2.0 BARAMULA 7 RAFIABAD 1 BARAMULLA
14 Jammu & Kashmir 1 8 2008 12 1 2009 2008-12-01 1 1 JAMMU & KASHMIR 2.0 BARAMULA 8 SOPORE 1 BARAMULLA
15 Jammu & Kashmir 1 8 2014 12 1 2015 2014-12-01 1 1 JAMMU & KASHMIR 2.0 BARAMULA 8 SOPORE 1 BARAMULLA
16 Jammu & Kashmir 1 9 2008 12 1 2009 2008-12-01 1 1 JAMMU & KASHMIR 2.0 BARAMULA 9 GUREZ 1 BARAMULLA
17 Jammu & Kashmir 1 9 2014 12 1 2015 2014-12-01 1 1 JAMMU & KASHMIR 2.0 BARAMULA 9 GUREZ 1 BARAMULLA
18 Jammu & Kashmir 1 10 2008 12 1 2009 2008-12-01 1 1 JAMMU & KASHMIR 2.0 BARAMULA 10 BANDIPORA 1 BARAMULLA
19 Jammu & Kashmir 1 10 2014 12 1 2015 2014-12-01 1 1 JAMMU & KASHMIR 2.0 BARAMULA 10 BANDIPORA 1 BARAMULLA
20 Jammu & Kashmir 1 11 2008 12 1 2009 2008-12-01 1 1 JAMMU & KASHMIR 2.0 BARAMULA 11 SONAWARI 1 BARAMULLA
21 Jammu & Kashmir 1 11 2014 12 1 2015 2014-12-01 1 1 JAMMU & KASHMIR 2.0 BARAMULA 11 SONAWARI 1 BARAMULLA
22 Jammu & Kashmir 1 12 2008 12 1 2009 2008-12-01 1 1 JAMMU & KASHMIR 2.0 BARAMULA 12 SANGRAMA 1 BARAMULLA
23 Jammu & Kashmir 1 12 2014 12 1 2015 2014-12-01 1 1 JAMMU & KASHMIR 2.0 BARAMULA 12 SANGRAMA 1 BARAMULLA
24 Jammu & Kashmir 1 13 2008 12 1 2009 2008-12-01 1 1 JAMMU & KASHMIR 2.0 BARAMULA 13 BARAMULA 1 BARAMULLA
25 Jammu & Kashmir 1 13 2014 12 1 2015 2014-12-01 1 1 JAMMU & KASHMIR 2.0 BARAMULA 13 BARAMULA 1 BARAMULLA
26 Jammu & Kashmir 1 14 2008 12 1 2009 2008-12-01 1 1 JAMMU & KASHMIR 2.0 BARAMULA 14 GULMARG 1 BARAMULLA
27 Jammu & Kashmir 1 14 2014 12 1 2015 2014-12-01 1 1 JAMMU & KASHMIR 2.0 BARAMULA 14 GULMARG 1 BARAMULLA
28 Jammu & Kashmir 1 15 2008 12 1 2009 2008-12-01 1 1 JAMMU & KASHMIR 2.0 BARAMULA 15 PATTAN 1 BARAMULLA
29 Jammu & Kashmir 1 15 2014 12 1 2015 2014-12-01 1 1 JAMMU & KASHMIR 2.0 BARAMULA 15 PATTAN 1 BARAMULLA
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
8328 Puducherry 34 16 2011 5 1 2011 2011-05-01 1 34 PUDUCHERRY 2.0 PONDICHERRY 16 Orleampeth 1 PONDICHERRY
8329 Puducherry 34 16 2016 5 1 2016 2016-05-01 1 34 PUDUCHERRY 2.0 PONDICHERRY 16 Orleampeth 1 PONDICHERRY
8330 Puducherry 34 17 2011 5 1 2011 2011-05-01 1 34 PUDUCHERRY 2.0 PONDICHERRY 17 Nellithope 1 PONDICHERRY
8331 Puducherry 34 17 2016 5 1 2016 2016-05-01 1 34 PUDUCHERRY 2.0 PONDICHERRY 17 Nellithope 1 PONDICHERRY
8332 Puducherry 34 18 2011 5 1 2011 2011-05-01 1 34 PUDUCHERRY 2.0 PONDICHERRY 18 Mudaliarpet 1 PONDICHERRY
8333 Puducherry 34 18 2016 5 1 2016 2016-05-01 1 34 PUDUCHERRY 2.0 PONDICHERRY 18 Mudaliarpet 1 PONDICHERRY
8334 Puducherry 34 19 2011 5 1 2011 2011-05-01 1 34 PUDUCHERRY 2.0 PONDICHERRY 19 Ariankuppam 1 PONDICHERRY
8335 Puducherry 34 19 2016 5 1 2016 2016-05-01 1 34 PUDUCHERRY 2.0 PONDICHERRY 19 Ariankuppam 1 PONDICHERRY
8336 Puducherry 34 20 2011 5 1 2011 2011-05-01 1 34 PUDUCHERRY 2.0 PONDICHERRY 20 Manavely 1 PONDICHERRY
8337 Puducherry 34 20 2016 5 1 2016 2016-05-01 1 34 PUDUCHERRY 2.0 PONDICHERRY 20 Manavely 1 PONDICHERRY
8338 Puducherry 34 21 2011 5 1 2011 2011-05-01 1 34 PUDUCHERRY 2.0 PONDICHERRY 21 Embalam (SC) 1 PONDICHERRY
8339 Puducherry 34 21 2016 5 1 2016 2016-05-01 1 34 PUDUCHERRY 2.0 PONDICHERRY 21 Embalam (SC) 1 PONDICHERRY
8340 Puducherry 34 22 2011 5 1 2011 2011-05-01 1 34 PUDUCHERRY 2.0 PONDICHERRY 22 Nettapakkam (SC) 1 PONDICHERRY
8341 Puducherry 34 22 2016 5 1 2016 2016-05-01 1 34 PUDUCHERRY 2.0 PONDICHERRY 22 Nettapakkam (SC) 1 PONDICHERRY
8342 Puducherry 34 23 2011 5 1 2011 2011-05-01 1 34 PUDUCHERRY 2.0 PONDICHERRY 23 Bahour 1 PONDICHERRY
8343 Puducherry 34 23 2016 5 1 2016 2016-05-01 1 34 PUDUCHERRY 2.0 PONDICHERRY 23 Bahour 1 PONDICHERRY
8344 Puducherry 34 24 2011 5 1 2011 2011-05-01 1 34 PUDUCHERRY 4.0 KARAIKAL 24 Nedungadu (SC) 1 PONDICHERRY
8345 Puducherry 34 24 2016 5 1 2016 2016-05-01 1 34 PUDUCHERRY 4.0 KARAIKAL 24 Nedungadu (SC) 1 PONDICHERRY
8346 Puducherry 34 25 2011 5 1 2011 2011-05-01 1 34 PUDUCHERRY 4.0 KARAIKAL 25 Thirunallar 1 PONDICHERRY
8347 Puducherry 34 25 2016 5 1 2016 2016-05-01 1 34 PUDUCHERRY 4.0 KARAIKAL 25 Thirunallar 1 PONDICHERRY
8348 Puducherry 34 26 2011 5 1 2011 2011-05-01 1 34 PUDUCHERRY 4.0 KARAIKAL 26 Karaikal North 1 PONDICHERRY
8349 Puducherry 34 26 2016 5 1 2016 2016-05-01 1 34 PUDUCHERRY 4.0 KARAIKAL 26 Karaikal North 1 PONDICHERRY
8350 Puducherry 34 27 2011 5 1 2011 2011-05-01 1 34 PUDUCHERRY 4.0 KARAIKAL 27 Karaikal South 1 PONDICHERRY
8351 Puducherry 34 27 2016 5 1 2016 2016-05-01 1 34 PUDUCHERRY 4.0 KARAIKAL 27 Karaikal South 1 PONDICHERRY
8352 Puducherry 34 28 2011 5 1 2011 2011-05-01 1 34 PUDUCHERRY 4.0 KARAIKAL 28 Neravy- T.R. Pattin 1 PONDICHERRY
8353 Puducherry 34 28 2016 5 1 2016 2016-05-01 1 34 PUDUCHERRY 4.0 KARAIKAL 28 Neravy- T.R. Pattin 1 PONDICHERRY
8354 Puducherry 34 29 2011 5 1 2011 2011-05-01 1 34 PUDUCHERRY 3.0 MAHE 29 Mahe 1 PONDICHERRY
8355 Puducherry 34 29 2016 5 1 2016 2016-05-01 1 34 PUDUCHERRY 3.0 MAHE 29 Mahe 1 PONDICHERRY
8356 Puducherry 34 30 2011 5 1 2011 2011-05-01 1 34 PUDUCHERRY 1.0 YANAM 30 Yanam 1 PONDICHERRY
8357 Puducherry 34 30 2016 5 1 2016 2016-05-01 1 34 PUDUCHERRY 1.0 YANAM 30 Yanam 1 PONDICHERRY

8358 rows × 17 columns

In [4]:
# Read geocoded Scrapped Data
geocoded_folder = os.path.join(data_folder, "Scrapped", "geocoded")
geocoded_files = os.listdir(geocoded_folder)
geocoded_files = [os.path.join(geocoded_folder, x)  for x in geocoded_files if x.split('.')[-1] == 'csv'][4:]
df_list = []
for file in geocoded_files:
    df = pd.read_csv(file)
    statuscol = 'Status as on 1/4/' + file.split('-')[-2].split('_')[-1]    
    print(statuscol)
    df = df[['Financial Year', 'Habit Category', statuscol, 'Tot Pop', 'ac code', 'state code']]
    df.columns = ['Financial Year', 'Habit Category', 'Status', 'Tot Pop', 'ac code', 'state code']
    #df = df[['Financial Year', 'Habit Category', 'Tot Pop', 'ac code', 'state code']]
    df_list.append(df)
# Merge All Data
water_df = pd.concat(df_list).reset_index(drop=True)
#water_df = water_df[water_df['Status'].isin(['FC', 'PC', 'QA'])]
water_df['dyear'] = water_df['Financial Year'].str.split('-').str[0].fillna(0).astype(int)
water_df = water_df[water_df.columns[1:]]
water_df['Tot Pop'] = water_df['Tot Pop'].apply(pd.to_numeric, errors='ceorce').fillna(0).astype(int)
#water_df = water_df.groupby(['Habit Category', 'Status', 'ac code', 'state code', 'dyear']).sum().reset_index()
#water_df['Status'] = 'Partially Covered'
#water_df[water_df['Habit Category'] == 'No. Of Habitation With 100% Population Coverage']['Status'] = 'Fully Covered'
water_df.loc[water_df['Status'] == 'FC', 'Status'] = 'Fully Covered'
water_df.loc[water_df['Status'] != 'Fully Covered', 'Status'] = 'Partially Covered'
water_df = water_df[['Status', 'ac code', 'state code', 'dyear', 'Tot Pop']]
water_df = water_df.groupby(['Status', 'ac code', 'state code', 'dyear']).sum().reset_index()
water_df
Status as on 1/4/2013
Status as on 1/4/2014
C:\Users\sandyjones\AppData\Local\conda\conda\envs\geo\lib\site-packages\IPython\core\interactiveshell.py:2785: DtypeWarning: Columns (7,13,14) have mixed types. Specify dtype option on import or set low_memory=False.
  interactivity=interactivity, compiler=compiler, result=result)
Status as on 1/4/2015
Status as on 1/4/2016
Status as on 1/4/2017
Out[4]:
Status ac code state code dyear Tot Pop
0 Fully Covered 0 1 2013 16377
1 Fully Covered 0 1 2014 13948
2 Fully Covered 0 1 2015 14990
3 Fully Covered 0 1 2016 15650
4 Fully Covered 0 1 2017 16359
5 Fully Covered 0 11 2013 7715
6 Fully Covered 0 11 2014 6968
7 Fully Covered 0 11 2015 5829
8 Fully Covered 0 11 2016 5503
9 Fully Covered 0 11 2017 5503
10 Fully Covered 0 24 2013 2692
11 Fully Covered 0 24 2014 3862
12 Fully Covered 0 24 2015 5729
13 Fully Covered 0 24 2016 6579
14 Fully Covered 0 24 2017 6826
15 Fully Covered 1 1 2013 23231
16 Fully Covered 1 1 2014 19426
17 Fully Covered 1 1 2015 22546
18 Fully Covered 1 1 2016 20847
19 Fully Covered 1 1 2017 22367
20 Fully Covered 1 2 2013 2586
21 Fully Covered 1 2 2014 1768
22 Fully Covered 1 2 2015 2072
23 Fully Covered 1 2 2016 2404
24 Fully Covered 1 2 2017 2594
25 Fully Covered 1 3 2013 44616
26 Fully Covered 1 3 2014 31082
27 Fully Covered 1 3 2015 26265
28 Fully Covered 1 3 2016 20491
29 Fully Covered 1 3 2017 19745
... ... ... ... ... ...
32835 Partially Covered 395 9 2013 14184
32836 Partially Covered 395 9 2015 4746
32837 Partially Covered 396 9 2013 2727
32838 Partially Covered 396 9 2017 145
32839 Partially Covered 397 9 2013 4386
32840 Partially Covered 397 9 2015 0
32841 Partially Covered 397 9 2017 400
32842 Partially Covered 398 9 2013 2318
32843 Partially Covered 398 9 2017 991
32844 Partially Covered 399 9 2015 86054
32845 Partially Covered 399 9 2016 39436
32846 Partially Covered 399 9 2017 40398
32847 Partially Covered 400 9 2013 11828
32848 Partially Covered 400 9 2014 21238
32849 Partially Covered 400 9 2015 23270
32850 Partially Covered 400 9 2016 28626
32851 Partially Covered 400 9 2017 28626
32852 Partially Covered 401 9 2013 66814
32853 Partially Covered 401 9 2014 6265
32854 Partially Covered 401 9 2015 16612
32855 Partially Covered 401 9 2016 9512
32856 Partially Covered 401 9 2017 9512
32857 Partially Covered 402 9 2013 39930
32858 Partially Covered 402 9 2014 17577
32859 Partially Covered 402 9 2015 13027
32860 Partially Covered 402 9 2016 21756
32861 Partially Covered 402 9 2017 21756
32862 Partially Covered 403 9 2013 113280
32863 Partially Covered 403 9 2016 62709
32864 Partially Covered 403 9 2017 62709

32865 rows × 5 columns

In [5]:
# Read geocoded downloaded Data
downloaded_folder = os.path.join(data_folder, "downloaded", "geocoded")
downloaded_files = os.listdir(downloaded_folder)
downloaded_files = [os.path.join(downloaded_folder, x)  for x in downloaded_files if x.split('.')[-1] == 'csv']
df_list = []
for file in downloaded_files:
    print(file)
    df = pd.read_csv(file)  
    df = df[['Year', 'Status', 'SC Current Population', 'ST Current Population', 'GENERAL Current Population', 'ac code', 'state code']]
#    df.columns = ['Financial Year', 'Habit Category', 'Status', 'Tot Pop', 'ac code', 'state code']
    df_list.append(df)
# Merge All Data
downloaded_df = pd.concat(df_list).reset_index(drop=True)
downloaded_df = downloaded_df[downloaded_df['Status'].isin(['Partially Covered', 'Fully Covered'])]
downloaded_df['dyear'] = downloaded_df['Year'].str.split('_').str[-1].fillna(0).astype(int)
downloaded_df['Tot Pop'] = downloaded_df['SC Current Population'].apply(pd.to_numeric, errors='ceorce').fillna(0).astype(int) + downloaded_df['ST Current Population'].apply(pd.to_numeric, errors='ceorce').fillna(0).astype(int) + downloaded_df['GENERAL Current Population'].apply(pd.to_numeric, errors='ceorce').fillna(0).astype(int)
downloaded_df = downloaded_df[['Status', 'ac code', 'state code', 'dyear', 'Tot Pop']]
downloaded_df = downloaded_df.groupby(['Status', 'ac code', 'state code', 'dyear']).sum().reset_index()
downloaded_df
E:\workspace\sourav sarkar\Task 10 - Prepare Indiawater dataset at assembly constituency level\data\downloaded\geocoded\geocoded_BASIC_HABITATION_INFORMATION_AS_ON_1_APR_09.csv
E:\workspace\sourav sarkar\Task 10 - Prepare Indiawater dataset at assembly constituency level\data\downloaded\geocoded\geocoded_BASIC_HABITATION_INFORMATION_AS_ON_1_APR_10.csv
E:\workspace\sourav sarkar\Task 10 - Prepare Indiawater dataset at assembly constituency level\data\downloaded\geocoded\geocoded_BASIC_HABITATION_INFORMATION_AS_ON_1_APR_11.csv
E:\workspace\sourav sarkar\Task 10 - Prepare Indiawater dataset at assembly constituency level\data\downloaded\geocoded\geocoded_BASIC_HABITATION_INFORMATION_AS_ON_1_APR_12.csv
Out[5]:
Status ac code state code dyear Tot Pop
0 Fully Covered 0 1 2009 9739
1 Fully Covered 0 1 2010 9839
2 Fully Covered 0 1 2011 10464
3 Fully Covered 0 1 2012 12584
4 Fully Covered 0 11 2009 11856
5 Fully Covered 0 11 2010 12650
6 Fully Covered 0 11 2011 12650
7 Fully Covered 0 11 2012 12573
8 Fully Covered 0 24 2009 8120
9 Fully Covered 0 24 2010 8120
10 Fully Covered 0 24 2011 8120
11 Fully Covered 0 24 2012 8120
12 Fully Covered 0 27 2009 2477
13 Fully Covered 0 27 2010 2477
14 Fully Covered 0 27 2011 2477
15 Fully Covered 0 27 2012 2477
16 Fully Covered 1 1 2009 8220
17 Fully Covered 1 1 2010 12268
18 Fully Covered 1 1 2011 12268
19 Fully Covered 1 1 2012 21895
20 Fully Covered 1 2 2009 4425
21 Fully Covered 1 2 2010 5913
22 Fully Covered 1 2 2011 6515
23 Fully Covered 1 2 2012 6703
24 Fully Covered 1 3 2009 1116
25 Fully Covered 1 3 2010 2074
26 Fully Covered 1 3 2011 2074
27 Fully Covered 1 3 2012 137734
28 Fully Covered 1 5 2009 31840
29 Fully Covered 1 5 2011 32538
... ... ... ... ... ...
27013 Partially Covered 392 9 2011 69595
27014 Partially Covered 392 9 2012 34761
27015 Partially Covered 393 9 2009 6452
27016 Partially Covered 393 9 2010 870
27017 Partially Covered 393 9 2011 62988
27018 Partially Covered 393 9 2012 9642
27019 Partially Covered 394 9 2011 51346
27020 Partially Covered 394 9 2012 7322
27021 Partially Covered 395 9 2011 116849
27022 Partially Covered 395 9 2012 42502
27023 Partially Covered 396 9 2011 15606
27024 Partially Covered 396 9 2012 5550
27025 Partially Covered 397 9 2011 106792
27026 Partially Covered 397 9 2012 43894
27027 Partially Covered 398 9 2011 38588
27028 Partially Covered 398 9 2012 14288
27029 Partially Covered 399 9 2011 90703
27030 Partially Covered 399 9 2012 20539
27031 Partially Covered 400 9 2009 2487
27032 Partially Covered 400 9 2011 84626
27033 Partially Covered 400 9 2012 15950
27034 Partially Covered 401 9 2009 17730
27035 Partially Covered 401 9 2010 84
27036 Partially Covered 401 9 2011 139377
27037 Partially Covered 401 9 2012 20429
27038 Partially Covered 402 9 2010 756
27039 Partially Covered 402 9 2011 145931
27040 Partially Covered 402 9 2012 38707
27041 Partially Covered 403 9 2011 152803
27042 Partially Covered 403 9 2012 29730

27043 rows × 5 columns

In [6]:
water_df = pd.concat([water_df, downloaded_df])
water_df
Out[6]:
Status ac code state code dyear Tot Pop
0 Fully Covered 0 1 2013 16377
1 Fully Covered 0 1 2014 13948
2 Fully Covered 0 1 2015 14990
3 Fully Covered 0 1 2016 15650
4 Fully Covered 0 1 2017 16359
5 Fully Covered 0 11 2013 7715
6 Fully Covered 0 11 2014 6968
7 Fully Covered 0 11 2015 5829
8 Fully Covered 0 11 2016 5503
9 Fully Covered 0 11 2017 5503
10 Fully Covered 0 24 2013 2692
11 Fully Covered 0 24 2014 3862
12 Fully Covered 0 24 2015 5729
13 Fully Covered 0 24 2016 6579
14 Fully Covered 0 24 2017 6826
15 Fully Covered 1 1 2013 23231
16 Fully Covered 1 1 2014 19426
17 Fully Covered 1 1 2015 22546
18 Fully Covered 1 1 2016 20847
19 Fully Covered 1 1 2017 22367
20 Fully Covered 1 2 2013 2586
21 Fully Covered 1 2 2014 1768
22 Fully Covered 1 2 2015 2072
23 Fully Covered 1 2 2016 2404
24 Fully Covered 1 2 2017 2594
25 Fully Covered 1 3 2013 44616
26 Fully Covered 1 3 2014 31082
27 Fully Covered 1 3 2015 26265
28 Fully Covered 1 3 2016 20491
29 Fully Covered 1 3 2017 19745
... ... ... ... ... ...
27013 Partially Covered 392 9 2011 69595
27014 Partially Covered 392 9 2012 34761
27015 Partially Covered 393 9 2009 6452
27016 Partially Covered 393 9 2010 870
27017 Partially Covered 393 9 2011 62988
27018 Partially Covered 393 9 2012 9642
27019 Partially Covered 394 9 2011 51346
27020 Partially Covered 394 9 2012 7322
27021 Partially Covered 395 9 2011 116849
27022 Partially Covered 395 9 2012 42502
27023 Partially Covered 396 9 2011 15606
27024 Partially Covered 396 9 2012 5550
27025 Partially Covered 397 9 2011 106792
27026 Partially Covered 397 9 2012 43894
27027 Partially Covered 398 9 2011 38588
27028 Partially Covered 398 9 2012 14288
27029 Partially Covered 399 9 2011 90703
27030 Partially Covered 399 9 2012 20539
27031 Partially Covered 400 9 2009 2487
27032 Partially Covered 400 9 2011 84626
27033 Partially Covered 400 9 2012 15950
27034 Partially Covered 401 9 2009 17730
27035 Partially Covered 401 9 2010 84
27036 Partially Covered 401 9 2011 139377
27037 Partially Covered 401 9 2012 20429
27038 Partially Covered 402 9 2010 756
27039 Partially Covered 402 9 2011 145931
27040 Partially Covered 402 9 2012 38707
27041 Partially Covered 403 9 2011 152803
27042 Partially Covered 403 9 2012 29730

59908 rows × 5 columns

In [11]:
variables = [
    'tot_pop_start',
    'tot_pop1',
    'tot_pop2',
    'tot_pop3',
    'tot_pop4',
    'tot_pop5',
    'tot_pop_end',
    'full_cvg_start',
    'full_cvg1',
    'full_cvg2',
    'full_cvg3',
    'full_cvg4',
    'full_cvg5',
    'full_cvg_end',
    'partial_cvg_start',
    'partial_cvg1',
    'partial_cvg2',
    'partial_cvg3',
    'partial_cvg4',
    'partial_cvg5',
    'partial_cvg_end',
]
#Get all variables
def get_ac_variables(row):
    #print(pd.DataFrame(row).T)
    next_elect = acdf[(acdf['state_code'] == row['state_code']) & (acdf['constituency_no'] == row['constituency_no']) & (acdf['datetime'] > row['datetime'])][0:1]
    if len(next_elect) < 1:
        next_elect = pd.DataFrame(row).T
        next_elect['dyear'] = next_elect['dyear'] + 5
        next_elect['datetime'] = next_elect['datetime'] + pd.DateOffset(years=5)
    #print(next_elect)
    delta_year = math.floor((next_elect['datetime'].dt.year - row['datetime'].year)/5)
    if not delta_year:
        delta_year = 1
    #print(delta_year)
    #Starting of Election Term
    try:
        df1 = water_df[(water_df['state code'] == row['state_code']) & (water_df['ac code'] == row['constituency_no']) & (water_df['dyear'] >= row['dyear']) & (water_df['dyear'] < next_elect['dyear'].values[0])]       
        tot_pop_start = df1[df1['dyear'] == row['dyear']]['Tot Pop'].sum()
        tot_pop1 = df1[df1['dyear'] == (row['dyear'] + delta_year-1)]['Tot Pop'].sum()
        tot_pop2 = df1[df1['dyear'] == (row['dyear'] + delta_year+0)]['Tot Pop'].sum()
        tot_pop3 = df1[df1['dyear'] == (row['dyear'] + delta_year+1)]['Tot Pop'].sum()
        tot_pop4 = df1[df1['dyear'] == (row['dyear'] + delta_year+2)]['Tot Pop'].sum()
        tot_pop_end = tot_pop5 = df1[df1['dyear'] > (row['dyear'] + delta_year+3)]['Tot Pop'].sum()
        
        df2 = df1[df1['Status'] == 'Fully Covered']
        full_cvg_start = df2[df2['dyear'] == row['dyear']]['Tot Pop'].sum()
        full_cvg1 = df2[df2['dyear'] == (row['dyear'] + delta_year-1)]['Tot Pop'].sum()
        full_cvg2 = df2[df2['dyear'] == (row['dyear'] + delta_year+0)]['Tot Pop'].sum()
        full_cvg3 = df2[df2['dyear'] == (row['dyear'] + delta_year+1)]['Tot Pop'].sum()
        full_cvg4 = df2[df2['dyear'] == (row['dyear'] + delta_year+2)]['Tot Pop'].sum()
        full_cvg_end = full_cvg5 = df2[df2['dyear'] > (row['dyear'] + delta_year+3)]['Tot Pop'].sum()
        
        df3 = df1[df1['Status'] == 'Partially Covered']
        partial_cvg_start = df3[df3['dyear'] == row['dyear']]['Tot Pop'].sum()
        partial_cvg1 = df3[df3['dyear'] == (row['dyear'] + delta_year-1)]['Tot Pop'].sum()
        partial_cvg2 = df3[df3['dyear'] == (row['dyear'] + delta_year+0)]['Tot Pop'].sum()
        partial_cvg3 = df3[df3['dyear'] == (row['dyear'] + delta_year+1)]['Tot Pop'].sum()
        partial_cvg4 = df3[df3['dyear'] == (row['dyear'] + delta_year+2)]['Tot Pop'].sum()
        partial_cvg_end = partial_cvg5 = df3[df3['dyear'] > (row['dyear'] + delta_year+3)]['Tot Pop'].sum()
        
        '''
        df1 = df1[df1['dyear'] == np.sort(df1['dyear'].unique())[0]]
        var1 = df1[df1['Status'] == 'Fully Covered']['Tot Pop'].sum()
        var2 = df1[df1['Status'] == 'Partially Covered']['Tot Pop'].sum()
        var3 = df1['Tot Pop'].sum()
        #End of Election Term
        df2 = water_df[(water_df['state code'] == row['state_code']) & (water_df['ac code'] == row['constituency_no']) & (water_df['dyear'] > row['dyear']) & (water_df['dyear'] <= next_elect['dyear'].values[0])]
        df2 = df2[df2['dyear'] == np.sort(df2['dyear'].unique())[-1]]
        #print(df2)
        var4 = df2[df2['Status'] == 'Fully Covered']['Tot Pop'].sum()
        var5 = df2[df2['Status'] == 'Partially Covered']['Tot Pop'].sum()
        var6 = df2['Tot Pop'].sum()
        '''
        #Return Now
        return tot_pop_start, tot_pop1, tot_pop2, tot_pop3, tot_pop4, tot_pop5, tot_pop_end, full_cvg_start, full_cvg1, full_cvg2, full_cvg3, full_cvg4, full_cvg5, full_cvg_end, partial_cvg_start, partial_cvg1, partial_cvg2, partial_cvg3, partial_cvg4, partial_cvg5, partial_cvg_end
    except:
        return 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
#Apply This Function
acdf[variables] = acdf.apply(get_ac_variables, axis=1, result_type='expand')
acdf
Out[11]:
state_name state_code constituency_no year month day dyear datetime OBJECTID ST_CODE ... full_cvg4 full_cvg5 full_cvg_end partial_cvg_start partial_cvg1 partial_cvg2 partial_cvg3 partial_cvg4 partial_cvg5 partial_cvg_end
0 Jammu & Kashmir 1 1 2008 12 1 2009 2008-12-01 1 1 ... 21895 19426 19426 22308 22308 18040 18040 8413 18275 18275
1 Jammu & Kashmir 1 1 2014 12 1 2015 2014-12-01 1 1 ... 0 0 0 14312 14312 18302 13742 0 0 0
2 Jammu & Kashmir 1 2 2008 12 1 2009 2008-12-01 1 1 ... 32410 42341 42341 66140 66140 62446 42286 41336 64151 64151
3 Jammu & Kashmir 1 2 2014 12 1 2015 2014-12-01 1 1 ... 0 0 0 64151 64151 70321 79322 0 0 0
4 Jammu & Kashmir 1 3 2008 12 1 2009 2008-12-01 1 1 ... 10353 5109 5109 31739 31739 31739 35770 26417 29281 29281
5 Jammu & Kashmir 1 3 2014 12 1 2015 2014-12-01 1 1 ... 0 0 0 36133 36133 27941 42808 0 0 0
6 Jammu & Kashmir 1 4 2008 12 1 2009 2008-12-01 1 1 ... 196793 220241 220241 246565 246565 226915 200140 191459 235064 235064
7 Jammu & Kashmir 1 4 2014 12 1 2015 2014-12-01 1 1 ... 0 0 0 196608 196608 215339 230216 0 0 0
8 Jammu & Kashmir 1 5 2008 12 1 2009 2008-12-01 1 1 ... 38890 48627 48627 67123 67123 58446 54448 54448 47600 47600
9 Jammu & Kashmir 1 5 2014 12 1 2015 2014-12-01 1 1 ... 0 0 0 42163 42163 56491 52479 0 0 0
10 Jammu & Kashmir 1 6 2008 12 1 2009 2008-12-01 1 1 ... 16080 18594 18594 40504 40504 33585 34558 33744 43899 43899
11 Jammu & Kashmir 1 6 2014 12 1 2015 2014-12-01 1 1 ... 0 0 0 41412 41412 39444 39444 0 0 0
12 Jammu & Kashmir 1 7 2008 12 1 2009 2008-12-01 1 1 ... 56381 57191 57191 94319 94319 86068 60541 52964 69253 69253
13 Jammu & Kashmir 1 7 2014 12 1 2015 2014-12-01 1 1 ... 0 0 0 51653 51653 56644 50797 0 0 0
14 Jammu & Kashmir 1 8 2008 12 1 2009 2008-12-01 1 1 ... 43747 34484 34484 64692 64692 56121 51217 51017 61131 61131
15 Jammu & Kashmir 1 8 2014 12 1 2015 2014-12-01 1 1 ... 0 0 0 60144 60144 61850 57540 0 0 0
16 Jammu & Kashmir 1 9 2008 12 1 2009 2008-12-01 1 1 ... 5699 12648 12648 1470 1470 5316 5316 5316 10172 10172
17 Jammu & Kashmir 1 9 2014 12 1 2015 2014-12-01 1 1 ... 0 0 0 14478 14478 12441 8981 0 0 0
18 Jammu & Kashmir 1 10 2008 12 1 2009 2008-12-01 1 1 ... 99176 101893 101893 21536 21536 134691 108081 94200 125777 125777
19 Jammu & Kashmir 1 10 2014 12 1 2015 2014-12-01 1 1 ... 0 0 0 119101 119101 109374 127093 0 0 0
20 Jammu & Kashmir 1 11 2008 12 1 2009 2008-12-01 1 1 ... 31555 41768 41768 10804 10804 47953 42717 43310 59513 59513
21 Jammu & Kashmir 1 11 2014 12 1 2015 2014-12-01 1 1 ... 0 0 0 31010 31010 27983 25548 0 0 0
22 Jammu & Kashmir 1 12 2008 12 1 2009 2008-12-01 1 1 ... 63214 51148 51148 27979 27979 27751 22798 22798 33308 33308
23 Jammu & Kashmir 1 12 2014 12 1 2015 2014-12-01 1 1 ... 0 0 0 24249 24249 24155 24855 0 0 0
24 Jammu & Kashmir 1 13 2008 12 1 2009 2008-12-01 1 1 ... 196549 194010 194010 224665 224665 169059 130139 126162 201096 201096
25 Jammu & Kashmir 1 13 2014 12 1 2015 2014-12-01 1 1 ... 0 0 0 173197 173197 175592 173890 0 0 0
26 Jammu & Kashmir 1 14 2008 12 1 2009 2008-12-01 1 1 ... 47388 45411 45411 54489 54489 54793 46134 45834 45227 45227
27 Jammu & Kashmir 1 14 2014 12 1 2015 2014-12-01 1 1 ... 0 0 0 36212 36212 38944 37727 0 0 0
28 Jammu & Kashmir 1 15 2008 12 1 2009 2008-12-01 1 1 ... 24586 33268 33268 29953 29953 31919 31619 31489 49639 49639
29 Jammu & Kashmir 1 15 2014 12 1 2015 2014-12-01 1 1 ... 0 0 0 36736 36736 30311 30311 0 0 0
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
8328 Puducherry 34 16 2011 5 1 2011 2011-05-01 1 34 ... 0 0 0 0 0 0 0 0 0 0
8329 Puducherry 34 16 2016 5 1 2016 2016-05-01 1 34 ... 0 0 0 0 0 0 0 0 0 0
8330 Puducherry 34 17 2011 5 1 2011 2011-05-01 1 34 ... 0 0 0 0 0 0 0 0 0 0
8331 Puducherry 34 17 2016 5 1 2016 2016-05-01 1 34 ... 0 0 0 0 0 0 0 0 0 0
8332 Puducherry 34 18 2011 5 1 2011 2011-05-01 1 34 ... 0 0 0 0 0 0 0 0 0 0
8333 Puducherry 34 18 2016 5 1 2016 2016-05-01 1 34 ... 0 0 0 0 0 0 0 0 0 0
8334 Puducherry 34 19 2011 5 1 2011 2011-05-01 1 34 ... 0 0 0 0 0 0 0 0 0 0
8335 Puducherry 34 19 2016 5 1 2016 2016-05-01 1 34 ... 0 0 0 0 0 0 0 0 0 0
8336 Puducherry 34 20 2011 5 1 2011 2011-05-01 1 34 ... 0 0 0 0 0 0 0 0 0 0
8337 Puducherry 34 20 2016 5 1 2016 2016-05-01 1 34 ... 0 0 0 0 0 0 0 0 0 0
8338 Puducherry 34 21 2011 5 1 2011 2011-05-01 1 34 ... 0 0 0 164 164 0 0 0 0 0
8339 Puducherry 34 21 2016 5 1 2016 2016-05-01 1 34 ... 0 0 0 0 0 0 0 0 0 0
8340 Puducherry 34 22 2011 5 1 2011 2011-05-01 1 34 ... 0 0 0 0 0 0 0 0 0 0
8341 Puducherry 34 22 2016 5 1 2016 2016-05-01 1 34 ... 0 0 0 0 0 0 0 0 0 0
8342 Puducherry 34 23 2011 5 1 2011 2011-05-01 1 34 ... 739 0 0 0 0 0 0 0 0 0
8343 Puducherry 34 23 2016 5 1 2016 2016-05-01 1 34 ... 0 0 0 0 0 0 0 0 0 0
8344 Puducherry 34 24 2011 5 1 2011 2011-05-01 1 34 ... 0 0 0 0 0 0 26396 28482 0 0
8345 Puducherry 34 24 2016 5 1 2016 2016-05-01 1 34 ... 0 0 0 28482 28482 28482 0 0 0 0
8346 Puducherry 34 25 2011 5 1 2011 2011-05-01 1 34 ... 0 0 0 0 0 0 27897 30126 0 0
8347 Puducherry 34 25 2016 5 1 2016 2016-05-01 1 34 ... 0 0 0 30126 30126 30126 0 0 0 0
8348 Puducherry 34 26 2011 5 1 2011 2011-05-01 1 34 ... 0 0 0 0 0 0 23458 25684 0 0
8349 Puducherry 34 26 2016 5 1 2016 2016-05-01 1 34 ... 0 0 0 25684 25684 25684 0 0 0 0
8350 Puducherry 34 27 2011 5 1 2011 2011-05-01 1 34 ... 0 0 0 0 0 0 0 0 0 0
8351 Puducherry 34 27 2016 5 1 2016 2016-05-01 1 34 ... 0 0 0 0 0 0 0 0 0 0
8352 Puducherry 34 28 2011 5 1 2011 2011-05-01 1 34 ... 2173 0 0 0 0 826 27852 29613 0 0
8353 Puducherry 34 28 2016 5 1 2016 2016-05-01 1 34 ... 0 0 0 29613 29613 29613 0 0 0 0
8354 Puducherry 34 29 2011 5 1 2011 2011-05-01 1 34 ... 0 0 0 0 0 0 0 0 0 0
8355 Puducherry 34 29 2016 5 1 2016 2016-05-01 1 34 ... 0 0 0 0 0 28172 0 0 0 0
8356 Puducherry 34 30 2011 5 1 2011 2011-05-01 1 34 ... 0 0 0 0 0 0 0 0 0 0
8357 Puducherry 34 30 2016 5 1 2016 2016-05-01 1 34 ... 0 0 0 0 0 0 0 0 0 0

8358 rows × 38 columns

In [12]:
# Output to CSV
acdf.to_csv(os.path.join(output_folder, "Assembly_Constituencies_Variables_Categories.csv"), encoding='utf-8', index=False)
In [ ]:
 
In [ ]: