View in Colab

Indian Rainfall Analysis

The 2019 Indian floods were a series of floods that affected over thirteen states in late July and early August 2019, due to incessant rains. At least 200 people died and about a million people were displaced. Karnataka and Maharashtra were the most severely affected states.

It was the heaviest monsoon in the last 25 years. More than 1600 people died between June and October 2019.

India being an agriculturally driven economy, it will be interesting to study the rainfall in India in the past decade to give us an idea of the changes in the pattern if there are any.

Source: Open Gov Data Platform India - data.gov.in

Let us work on the INDIAN RAINFALL DATA!

Import libraries

In [1]:
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

Read the data

In [2]:
data = pd.read_csv('../data/rainfall in india 1901-2015.csv')
data.head()
Out[2]:
SUBDIVISION YEAR JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC ANNUAL Jan-Feb Mar-May Jun-Sep Oct-Dec
0 ANDAMAN & NICOBAR ISLANDS 1901 49.2 87.1 29.2 2.3 528.8 517.5 365.1 481.1 332.6 388.5 558.2 33.6 3373.2 136.3 560.3 1696.3 980.3
1 ANDAMAN & NICOBAR ISLANDS 1902 0.0 159.8 12.2 0.0 446.1 537.1 228.9 753.7 666.2 197.2 359.0 160.5 3520.7 159.8 458.3 2185.9 716.7
2 ANDAMAN & NICOBAR ISLANDS 1903 12.7 144.0 0.0 1.0 235.1 479.9 728.4 326.7 339.0 181.2 284.4 225.0 2957.4 156.7 236.1 1874.0 690.6
3 ANDAMAN & NICOBAR ISLANDS 1904 9.4 14.7 0.0 202.4 304.5 495.1 502.0 160.1 820.4 222.2 308.7 40.1 3079.6 24.1 506.9 1977.6 571.0
4 ANDAMAN & NICOBAR ISLANDS 1905 1.3 0.0 3.3 26.9 279.5 628.7 368.7 330.5 297.0 260.7 25.4 344.7 2566.7 1.3 309.7 1624.9 630.8

Summary of the data

In [3]:
data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4116 entries, 0 to 4115
Data columns (total 19 columns):
 #   Column       Non-Null Count  Dtype  
---  ------       --------------  -----  
 0   SUBDIVISION  4116 non-null   object 
 1   YEAR         4116 non-null   int64  
 2   JAN          4112 non-null   float64
 3   FEB          4113 non-null   float64
 4   MAR          4110 non-null   float64
 5   APR          4112 non-null   float64
 6   MAY          4113 non-null   float64
 7   JUN          4111 non-null   float64
 8   JUL          4109 non-null   float64
 9   AUG          4112 non-null   float64
 10  SEP          4110 non-null   float64
 11  OCT          4109 non-null   float64
 12  NOV          4105 non-null   float64
 13  DEC          4106 non-null   float64
 14  ANNUAL       4090 non-null   float64
 15  Jan-Feb      4110 non-null   float64
 16  Mar-May      4107 non-null   float64
 17  Jun-Sep      4106 non-null   float64
 18  Oct-Dec      4103 non-null   float64
dtypes: float64(17), int64(1), object(1)
memory usage: 611.1+ KB
In [4]:
data.isnull().sum()
Out[4]:
SUBDIVISION     0
YEAR            0
JAN             4
FEB             3
MAR             6
APR             4
MAY             3
JUN             5
JUL             7
AUG             4
SEP             6
OCT             7
NOV            11
DEC            10
ANNUAL         26
Jan-Feb         6
Mar-May         9
Jun-Sep        10
Oct-Dec        13
dtype: int64

Finding years where all months data is missing

In [5]:
data.YEAR[data.iloc[:,2:14].isnull().all(axis=1)]
Out[5]:
Series([], Name: YEAR, dtype: int64)

There is no year (or row) in the dataset where all the measurements from Jan-Dec are missing

In [6]:
# can might handle missing values in ANNUAL column by adding it ourselves
data['MY_ANNUAL'] = data.iloc[:,2:14].sum(axis=1)
In [7]:
data.isnull().sum()
Out[7]:
SUBDIVISION     0
YEAR            0
JAN             4
FEB             3
MAR             6
APR             4
MAY             3
JUN             5
JUL             7
AUG             4
SEP             6
OCT             7
NOV            11
DEC            10
ANNUAL         26
Jan-Feb         6
Mar-May         9
Jun-Sep        10
Oct-Dec        13
MY_ANNUAL       0
dtype: int64

However, a better way in this analysis would be to replace it mean.

Inspect the data, find missing values and replace them with appropriate values

In [8]:
## We can either replace subdivision means or means across all subdivision
data.groupby('SUBDIVISION').mean()
Out[8]:
YEAR JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC ANNUAL Jan-Feb Mar-May Jun-Sep Oct-Dec MY_ANNUAL
SUBDIVISION
ANDAMAN & NICOBAR ISLANDS 1958.918182 52.637273 27.994545 31.824074 72.223148 357.056881 471.580556 400.042593 400.047222 439.482243 290.264815 233.744444 153.144860 2927.439423 80.632727 462.249533 1706.687850 675.416822 2876.093636
ARUNACHAL PRADESH 1965.824742 47.297917 91.116667 153.527368 263.836082 358.522680 647.373958 694.544792 495.229897 432.134021 194.686316 35.696842 24.502105 3418.857143 138.416667 777.686316 2271.422105 254.513830 3414.786598
ASSAM & MEGHALAYA 1958.000000 16.974783 31.441739 79.026957 203.115652 341.539130 510.161739 495.102609 404.593043 310.734783 152.118261 26.938261 8.951304 2580.695652 48.413043 623.687826 1720.590435 188.015652 2580.698261
BIHAR 1958.000000 13.386087 14.393913 10.124348 16.918261 53.081739 174.315652 324.441739 299.643478 217.384348 63.074783 7.178261 3.694783 1197.633913 27.776522 80.126957 1015.786087 73.953913 1197.637391
CHHATTISGARH 1958.000000 14.206957 19.259130 15.266957 16.773043 21.048696 198.266087 398.577391 389.873043 217.780000 63.660000 11.772174 5.248696 1371.728696 33.462609 53.092174 1204.500870 80.674783 1371.732174
COASTAL ANDHRA PRADESH 1958.000000 7.483478 12.923478 13.221739 26.740870 62.549565 123.693913 173.824348 175.923478 181.707826 185.511304 77.903478 11.420000 1052.904348 20.404348 102.515652 655.141739 274.835652 1052.903478
COASTAL KARNATAKA 1958.000000 1.937719 1.518261 6.357391 30.916522 122.787826 841.326087 1127.028696 713.618261 299.652174 184.552174 63.607826 12.613913 3408.409649 3.371053 160.051304 2981.618261 260.775652 3405.900000
EAST MADHYA PRADESH 1958.000000 19.401739 18.693913 13.637391 7.188696 9.273043 141.029565 371.378261 369.368696 194.236522 39.686087 12.705217 8.404348 1205.000000 38.094783 30.096522 1076.018261 60.800000 1205.003478
EAST RAJASTHAN 1958.000000 6.422609 5.417391 4.516522 3.144348 9.820000 63.399130 223.347826 218.277391 97.978261 14.360870 4.873913 3.651304 655.215652 11.837391 17.487826 602.998261 22.887826 655.209565
EAST UTTAR PRADESH 1958.000000 16.012174 15.873913 8.907826 6.430435 17.211304 110.712174 290.568696 275.613913 184.591304 42.920870 4.590435 5.776522 979.213043 31.887826 32.553913 861.486087 53.293913 979.209565
GANGETIC WEST BENGAL 1958.000000 12.595652 22.452174 29.090435 44.885217 107.787826 247.196522 326.377391 311.382609 245.710435 115.746087 21.579130 5.690435 1490.487826 35.042609 181.766087 1130.657391 143.018261 1490.493913
GUJARAT REGION 1958.000000 1.786087 1.191304 1.220870 1.116522 5.809565 121.284348 348.920870 259.193043 148.841739 20.565217 6.928696 1.339130 918.230435 2.977391 8.161739 878.251304 28.834783 918.197391
HARYANA DELHI & CHANDIGARH 1958.000000 16.889565 17.433913 12.935652 7.633913 14.533913 48.626087 150.015652 150.840870 88.306957 12.823478 3.264348 7.186087 530.496522 34.331304 35.112174 437.786957 23.270435 530.490435
HIMACHAL PRADESH 1958.000000 84.189565 90.894783 101.146087 62.428696 58.156522 91.220870 280.284348 273.933043 130.219130 31.278261 16.695652 39.893043 1260.345217 175.082609 221.726957 775.664348 87.871304 1260.340000
JAMMU & KASHMIR 1958.000000 102.030435 115.450435 131.378261 93.702609 67.476522 64.234783 179.837719 180.973043 89.289565 34.166957 24.133333 55.425439 1139.684211 217.482609 292.552174 515.428070 113.959649 1135.843478
JHARKHAND 1958.000000 17.621739 24.186087 18.423478 19.366957 48.317391 194.588696 336.975652 325.524348 227.421739 80.015652 11.923478 4.939130 1309.303478 41.809565 86.095652 1084.510435 96.880870 1309.304348
KERALA 1958.000000 12.246957 15.496522 36.814783 110.573913 229.881739 654.302609 700.953043 421.977391 245.619130 294.122609 163.560000 39.950435 2925.487826 27.739130 377.253913 2022.840870 497.636522 2925.499130
KONKAN & GOA 1958.000000 1.262609 0.546957 1.374783 4.266087 33.515652 688.569565 1073.030435 682.756522 349.780000 113.386957 24.671304 4.516522 2977.686087 1.813043 39.161739 2794.130435 142.579130 2977.677391
LAKSHADWEEP 1958.350877 27.494643 15.834513 14.350893 45.163393 163.893750 327.627679 281.928829 207.993750 163.170270 166.727928 124.840741 60.810909 1590.886408 42.500000 223.822727 983.554545 355.387037 1561.094737
MADHYA MAHARASHTRA 1958.000000 3.054783 1.467826 3.596522 9.146957 22.943478 147.426087 248.980000 184.397391 157.221739 70.194783 25.945217 5.848696 880.233043 4.526087 35.692174 738.025217 101.986087 880.223478
MATATHWADA 1958.000000 5.000870 4.443478 7.105217 7.594783 15.646957 136.957391 180.648696 166.484348 178.476522 58.580000 22.436522 7.302609 790.692174 9.448696 30.352174 662.567826 88.319130 790.677391
NAGA MANI MIZO TRIPURA 1958.000000 14.025217 36.652174 77.199130 170.733043 290.839130 445.633913 438.684348 411.281739 314.350435 175.006087 46.833913 12.399130 2433.619130 50.669565 538.769565 1609.941739 234.240000 2433.638261
NORTH INTERIOR KARNATAKA 1958.000000 3.013043 3.172174 7.123478 24.300870 47.035652 100.993043 138.531304 119.459130 142.940870 95.688696 29.207826 6.327826 717.795652 6.184348 78.460870 501.927826 131.223478 717.793913
ORISSA 1958.000000 12.329565 19.719130 21.134783 34.160000 64.886087 210.860870 351.173043 355.382609 241.403478 113.592174 27.961739 5.567826 1458.169565 32.047826 120.184348 1158.817391 147.122609 1458.171304
PUNJAB 1958.000000 25.246087 26.786957 23.651304 12.660000 14.136522 46.466957 168.963478 158.167826 86.789565 13.836522 4.140000 12.694783 593.535652 52.030435 50.440000 460.392174 30.669565 593.540000
RAYALSEEMA 1958.000000 9.867826 5.680000 8.076522 19.808696 50.475652 64.742609 96.081739 107.511304 131.720000 135.327826 102.653913 34.260000 766.206087 15.545217 78.358261 400.058261 272.241739 766.206087
SAURASHTRA & KUTCH 1958.000000 1.139130 1.615652 1.296522 1.183478 4.662609 74.371304 194.970435 118.770435 75.418261 14.510435 6.096522 1.108696 495.161739 2.752174 7.140870 463.536522 21.718261 495.143478
SOUTH INTERIOR KARNATAKA 1958.000000 2.928696 4.163478 9.485217 42.280870 92.100000 141.417391 231.359130 174.239130 137.313913 139.143478 54.431304 11.517391 1040.391304 7.087826 143.861739 684.338261 205.093913 1040.380000
SUB HIMALAYAN WEST BENGAL & SIKKIM 1958.000000 14.083478 22.974783 43.135652 110.681739 269.143478 537.881739 646.402609 520.763478 421.341739 143.646087 16.088696 6.060000 2752.217391 37.060870 422.968696 2126.391304 165.801739 2752.203478
TAMIL NADU 1958.000000 23.819130 13.422609 19.475652 44.995652 69.920870 52.056522 71.314783 95.887826 111.597391 183.196522 176.903478 81.137391 943.713043 37.239130 134.386087 330.847826 441.234783 943.727826
TELANGANA 1958.000000 7.702609 9.688696 12.614783 18.185217 25.373913 142.126087 247.499130 215.059130 175.503478 74.226957 20.250435 5.141739 953.378261 17.396522 56.173043 780.186957 99.620870 953.372174
UTTARAKHAND 1958.000000 53.797391 63.452174 57.272174 35.166087 55.338261 162.551304 390.698261 382.023478 196.096522 39.073913 8.187826 22.035652 1465.696522 117.251304 147.773913 1131.367826 69.306087 1465.693043
VIDARBHA 1958.000000 10.563478 11.982609 11.872174 9.435652 11.551304 173.578261 329.428696 285.949565 175.449565 52.148696 15.574783 7.927826 1095.459130 22.544348 32.851304 964.403478 75.654783 1095.462609
WEST MADHYA PRADESH 1958.000000 9.241739 6.307895 5.173043 2.375652 7.657391 111.781739 302.982609 288.108696 161.168696 28.086957 12.340870 6.296522 944.358772 15.638596 15.217391 864.043478 46.724348 941.466957
WEST RAJASTHAN 1958.000000 3.327826 4.930435 3.986087 3.571304 9.443478 28.637391 95.171304 94.555652 40.342609 5.127826 1.666957 1.902609 292.673043 8.255652 17.006087 258.707826 8.700870 292.663478
WEST UTTAR PRADESH 1958.000000 17.666087 17.893913 11.461739 6.253043 12.306087 77.597391 246.520000 251.299130 146.254783 28.777391 3.966087 7.114783 827.114783 35.554783 30.026087 721.676522 39.858261 827.110435
In [9]:
data.groupby('SUBDIVISION').fillna(data.groupby('SUBDIVISION').mean())
Out[9]:
YEAR JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC ANNUAL Jan-Feb Mar-May Jun-Sep Oct-Dec MY_ANNUAL
0 1901 49.2 87.1 29.2 2.3 528.8 517.5 365.1 481.1 332.6 388.5 558.2 33.6 3373.2 136.3 560.3 1696.3 980.3 3373.2
1 1902 0.0 159.8 12.2 0.0 446.1 537.1 228.9 753.7 666.2 197.2 359.0 160.5 3520.7 159.8 458.3 2185.9 716.7 3520.7
2 1903 12.7 144.0 0.0 1.0 235.1 479.9 728.4 326.7 339.0 181.2 284.4 225.0 2957.4 156.7 236.1 1874.0 690.6 2957.4
3 1904 9.4 14.7 0.0 202.4 304.5 495.1 502.0 160.1 820.4 222.2 308.7 40.1 3079.6 24.1 506.9 1977.6 571.0 3079.6
4 1905 1.3 0.0 3.3 26.9 279.5 628.7 368.7 330.5 297.0 260.7 25.4 344.7 2566.7 1.3 309.7 1624.9 630.8 2566.7
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
4111 2011 5.1 2.8 3.1 85.9 107.2 153.6 350.2 254.0 255.2 117.4 184.3 14.9 1533.7 7.9 196.2 1013.0 316.6 1533.7
4112 2012 19.2 0.1 1.6 76.8 21.2 327.0 231.5 381.2 179.8 145.9 12.4 8.8 1405.5 19.3 99.6 1119.5 167.1 1405.5
4113 2013 26.2 34.4 37.5 5.3 88.3 426.2 296.4 154.4 180.0 72.8 78.1 26.7 1426.3 60.6 131.1 1057.0 177.6 1426.3
4114 2014 53.2 16.1 4.4 14.9 57.4 244.1 116.1 466.1 132.2 169.2 59.0 62.3 1395.0 69.3 76.7 958.5 290.5 1395.0
4115 2015 2.2 0.5 3.7 87.1 133.1 296.6 257.5 146.4 160.4 165.4 231.0 159.0 1642.9 2.7 223.9 860.9 555.4 1642.9

4116 rows × 19 columns

In [10]:
data.mean()
Out[10]:
YEAR         1958.218659
JAN            18.957320
FEB            21.805325
MAR            27.359197
APR            43.127432
MAY            85.745417
JUN           230.234444
JUL           347.214334
AUG           290.263497
SEP           197.361922
OCT            95.507009
NOV            39.866163
DEC            18.870580
ANNUAL       1411.008900
Jan-Feb        40.747786
Mar-May       155.901753
Jun-Sep      1064.724769
Oct-Dec       154.100487
MY_ANNUAL    1414.379252
dtype: float64
In [11]:
## lets just replace it with mean across all subdivisions, since our aim would be to create a model, 
## however, any imputaion like this should happen before the train/test split and seperately for train and test sets,
## to avoid data-or-information-leak

data.fillna(data.mean(), inplace=True)

Plot the mean annual rainfall and note down your observations regarding the same

In [12]:
mean_annual_rainfall = (data.groupby('YEAR').ANNUAL.mean())
#mean_annual_rainfall.name = 'Mean Annual Rainfall'
mean_annual_rainfall.plot(legend=True, label='Mean Annual Rainfall', figsize=(12,10))

ma10 = mean_annual_rainfall.rolling(10).mean()
#ma10.name = 'Moving Avg. for last 10 years'
ma10.plot(legend=True,label='Moving Avg. for last 10 years')
plt.xlabel('Year',fontsize=20)
plt.ylabel('Annual Rainfall (in mm)',fontsize=20)
plt.title('Annual Rainfall in India from year 1901-2015', fontsize=25)
plt.show()

Insights:

  • Highest average rainfall in India was recored in the year 1961.This was because in 1961 India received multiple cyclones.City of Pune was flooded in the year 1961 which is remembered as Panshet Flood.

  • Year 1965-66 were twin drought years and there was food scarcity in India.Prime Minister Lal Bahadur Shastri gave the Slogan Jai Jawan Jai Kissan to people of India.This lead to green revolution in India making India a food surplus country in the coming decades.

  • The red line is the 10 year moving average of the rainfall in India.It seems since 1960s there is slight dip in the rainfall in India.Now a days due to global warming the period of Monsoon season has shortned.We see more of erratic rainfall pattern.This needs more study.

Similarly analyze the seasonal rainfall as per subdivisions and note down your observations

In [13]:
(data
 .loc[:,['SUBDIVISION','Jan-Feb','Mar-May', 'Jun-Sep','Oct-Dec']]
 .groupby('SUBDIVISION')
 .mean()
 .sort_values('Jun-Sep')
 .plot.barh(stacked=True,figsize=(16,10), title='Rainfall in subdivision in India'))
plt.xlabel('Rainfall in mm')
plt.show()

Insights:

  • From the above graph we can see that majority of rainfall is received in the month of Jun-Sep which is the Monsoon season.Oct-Dec is time of return monsoon.Jan-Feb are the winter months.Mar-May is time for Summer rains.

  • Coastal Karnataka,Arunachal Pradesh,Konkan Goa and Kerala receive highest rainfall.

  • Rajastan,Gujrat,Haryana and Punjab receives low rainfall.Interesting thing is that Punjab and Haryana have high agricultural output despite low rainfall.Their water requirnments are met by rivers and canals.

With boxplot analyze the distribution of rainfall in various states and onote down your observations

In [14]:
plt.figure(figsize=(23,10))
ax=sns.boxplot(y='SUBDIVISION', x='ANNUAL', data=data, width=0.8)
ax.set_xlabel('Annual Rainfall in mm',fontsize=30)
plt.show()

Insights:

We can see Subdivision Arunachal Pradesh shows highest highest difference between Maximum and Minimum rainfall received.Costal Karnataka receives close to 3400 mm of Annual rainfall which is the highest in India.West Rajastan receives the least amount of rainfall.

Analyze the rainfall through years in Kerala and note down your observations

In [15]:
Kerala = data.loc[data.SUBDIVISION=='KERALA',:]
Kerala.groupby("YEAR").ANNUAL.mean().plot(legend=True, label='Kerala')
mean_annual_rainfall.plot(figsize=(12,8), 
                          title='Annual rainfall in Kerala compared to the whole of India',
                          legend=True, label='India')
plt.ylabel('Annual rainfall in mm')
plt.show()

Insight:

Prior to 2018 Kerala had major flood in the year 1924 which is evident in the data.Contrary to popular belief Kerala received maximum annual rainfall in year 1961(4257 mm) and not 1924(4226 mm).In 2018 Kerala has received 2226.4 mm of rain in the monsoon season.This is 40% more than the average rainfall.

Districts of Kerala

Read the district wise rainfall data

In [16]:
Dist = pd.read_csv('../data/district wise rainfall normal.csv')
Dist.head()
Out[16]:
STATE_UT_NAME DISTRICT JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC ANNUAL Jan-Feb Mar-May Jun-Sep Oct-Dec
0 ANDAMAN And NICOBAR ISLANDS NICOBAR 107.3 57.9 65.2 117.0 358.5 295.5 285.0 271.9 354.8 326.0 315.2 250.9 2805.2 165.2 540.7 1207.2 892.1
1 ANDAMAN And NICOBAR ISLANDS SOUTH ANDAMAN 43.7 26.0 18.6 90.5 374.4 457.2 421.3 423.1 455.6 301.2 275.8 128.3 3015.7 69.7 483.5 1757.2 705.3
2 ANDAMAN And NICOBAR ISLANDS N & M ANDAMAN 32.7 15.9 8.6 53.4 343.6 503.3 465.4 460.9 454.8 276.1 198.6 100.0 2913.3 48.6 405.6 1884.4 574.7
3 ARUNACHAL PRADESH LOHIT 42.2 80.8 176.4 358.5 306.4 447.0 660.1 427.8 313.6 167.1 34.1 29.8 3043.8 123.0 841.3 1848.5 231.0
4 ARUNACHAL PRADESH EAST SIANG 33.3 79.5 105.9 216.5 323.0 738.3 990.9 711.2 568.0 206.9 29.5 31.7 4034.7 112.8 645.4 3008.4 268.1

Annual rainfall in different districts of Kerala

In [ ]:
 
In [17]:
Kerala_Dist = Dist.loc[Dist.STATE_UT_NAME=='KERALA',:]
(Kerala_Dist
 .sort_values('ANNUAL')
 .plot.barh(x='DISTRICT',
            y='ANNUAL', 
            title="Rainfall in Districts of Kerala",
            figsize=(12,8),
           legend=False)
)
plt.xlabel('Annual Rainfall in mm')
plt.show()

Insight:

North west districts are among the highest receiving rainfall places annually.

Find out the districts with least rainfall

In [18]:
(Dist
 .sort_values('ANNUAL',ascending=False)
 .tail(10)
 .plot.barh(x='DISTRICT',y='ANNUAL',
           legend=False,
           title='Districts with Minumum Rainfall in India')
)
plt.xlabel('Annual Rainfall (in mm)')
plt.show()
In [19]:
## If there are multiple Districts with same name, then we can be explicit by grouping State and District
(Dist
 .groupby(['STATE_UT_NAME', 'DISTRICT'])
 .ANNUAL.mean()
 .sort_values(ascending=False)
 .tail(10)
 .plot.barh(x='DISTRICT',y='ANNUAL',
           legend=False,
           title='Districts with Minumum Rainfall in India')
)
plt.xlabel('Annual Rainfall (in mm)')
plt.show()

Insight:

Ladak which is part of Jammu and Kashmir receives 94.6 mm. Ladak and Kargil which receive less rainfall are part of Indian State Jammu and Kashmir.Jaisalmer,Sri Ganganaga and Barmer are part of Rajastan State.

Similarly, find districts with maximum rainfall

In [20]:
(Dist
 .groupby(['STATE_UT_NAME', 'DISTRICT'])
 .ANNUAL.mean()
 .sort_values(ascending=True)
 .tail(10)
 .plot.barh(x='DISTRICT',y='ANNUAL',
           legend=False)
)
Out[20]:
<matplotlib.axes._subplots.AxesSubplot at 0x22ce07f7f70>

Insights:

Districts from North eastern states - Manipur, Meghalaya, Arunachal Pradesh and also Southern state of Karnataka receive max rainfall