In [1]:
import pandas as pd
import numpy as np

Import data file as a pandas data frame

In [49]:
heads = ["borough","location","creation_date","total_loans","year_loans","status","type","cote","title","variant","author","collaboration","publisher","place","country","year","num_pages","language","collection","ISBN","img_url"]
data = pd.read_csv('donnees_ouverte.csv', encoding='utf-8', header=None, names=heads)
In [4]:
data[:4]
Out[4]:
borough location creation_date total_loans year_loans status type cote title variant author collaboration publisher place country year num_pages language collection ISBN
0 Anjou (ANJ) Jean-Corbeil / Adultes - Romans 2008-03-09 01:21:52 2 1 Disponible LV_Fiction A C823.99 B249abL Abra : NaN Barfoot, Joan, NaN Québec-Amérique, Montréal : quc c1985. 269 p. ; fre NaN 2890372588 (br.) ...
1 Saint-Léonard (SLE) Saint-Léonard / Adultes - Romans 2010-11-25 22:41:02 0 0 Disponible LV_Fiction A C823.99 B249abL Abra : NaN Barfoot, Joan, NaN Québec-Amérique, Montréal : quc c1985. 269 p. ; fre NaN 2890372588 (br.) ...
2 Sans Arroundissement Biblio-Courrier / Adultes - Romans 2007-06-08 00:13:41 0 0 Disponible LV_Fiction A C823.99 B249abL Abra : NaN Barfoot, Joan, NaN Québec-Amérique, Montréal : quc c1985. 269 p. ; fre NaN 2890372588 (br.) ...
3 Côte-des-Neiges - Notre-Dame-de-Grâce (CND) C-D-Neiges / Jeunes - BD 2007-06-08 00:13:41 6 0 Disponible LV_Fiction J NaN L'invincible Armada / NaN De Moor, Bob, NaN Casterman, Tournai : be 1978- . v. : fre NaN 2203320036 (v.2 : cart.) ...

4 rows × 21 columns

How many of each genre in the catalog?

In [84]:
type_counts = data.groupby(['type'])
type_counts.aggregate(np.sum).sort('total_loans', ascending=False)
Out[84]:
total_loans year_loans
type
LV_Fiction J 11131095 1241880
LV_Fiction A 8120716 1143277
LV_Documentaire A 4900688 847388
DVD A 4805153 324077
LV_Documentaire J 3007874 472282
DVD J 1923453 151487
DC_Musique A 1306841 174419
Nouveauté 498511 140704
PER_Imprimé A 440278 189779
LV_Gros caractères A 211599 32831
PER_Imprimé J 170694 54370
MULTI-SUPPORTS J 166776 18774
DC_Livre sonore A 137497 20550
JEU VIDEO SUR CONSOLE J 91803 17003
DVD BLU-RAY A 83691 17790
DC_Musique J 78583 9491
JEU ÉDUCATIF J 56056 7599
CD-ROM J 52507 4454
MULTI-S_Langues A 42718 3613
MULTI-SUPPORTS A 37506 4657
JEU VIDEO SUR CONSOLE A 35324 8668
DVD BLU-RAY J 27094 4211
DC_Langues A 26150 2794
CD-ROM A 24590 2346
DC_Livre sonore J 23759 3619
CD-ROM_Langues A 19131 1520
PARTITION A 16021 2709
PO_Québec 15411 1487
DOC. CARTOGR. 9527 1348
MULTI-S_Langues J 9257 1015
LV_Location 5932 2325
CD-ROM_Langues J 4355 377
DC_Langues J 2251 282
LV_Référence A 2023 559
VIDEOCAS A 2008 565
LV_Référence J 1806 489
VIDEOCAS J 1785 229
DVD_Langues A 1214 121
CAS_Livre sonore A 1174 281
LV_Livre numérique A 768 134
DVD-ROM A 552 81
DVD-ROM J 440 59
PO_Autres 359 44
PO_Canada 356 83
LV_Gros caractères J 339 37
VIDEOCAS_Langues A 316 30
CAS_Musique A 274 31
CAS_Livre sonore J 255 37
CAS_Langues A 206 16
AFFICHE/POSTER 201 34
LV_Braille 195 36
PARTITION J 138 26
Non traité 102 14
201 42 20
CAS_Musique J 40 7
DOSSIER J 15 2
303.49 W746L 8 0
JEU ÉDUCATIF A 3 2
CAS_Langues J 3 0
VIDEOCAS_Langues J 3 0
... ...

71 rows × 2 columns

Number of unique titles (out of 4.4 total)

In [5]:
len(data['title'].unique())
Out[5]:
735657

Which boroughs have the largest collections?

In [12]:
data['borough'].value_counts()
Out[12]:
Côte-des-Neiges - Notre-Dame-de-Grâce         403759
Saint-Laurent                                 322519
Rosemont - La Petite-Patrie                   299252
Villeray - Saint-Michel - Parc-Extension      292581
Mercier-Hochelaga-Maisonneuve                 276324
Ahuntsic - Cartierville                       267121
Pierrefonds - Roxboro                         265956
Montréal-Nord                                 258445
LaSalle                                       247478
Saint-Léonard                                 219786
Verdun                                        217866
Sud-Ouest                                     207937
Rivière-des-Prairies - Pointe-aux-Trembles    206339
Plateau-Mont-Royal                            165997
Ville-Marie                                   163627
Anjou                                         135930
Outremont                                      83444
Sans Arroundissement                           79398
L'Île Bizard - Sainte-Geneviève                61766
Lachine                                        57553
dtype: int64
In [112]:
title_counts = data.groupby(['title'])
title_counts.aggregate(np.sum).sort('total_loans', ascending=False).head(10)
Out[112]:
total_loans year_loans
title
Naruto. 166289 10443
Album Garfield. 97612 5250
Winx club. 65142 3697
Les légendaires. 56372 3710
Détective Conan. 51235 3899
Les Simpson. 49276 3406
One Piece. 47003 3796
Yu-Gi-Oh. 40751 2286
Fruits basket, une corbeille de fruits. 36220 1906
Caillou. 35773 2428

10 rows × 2 columns

Filtered data frame for English fiction

In [60]:
eng_fiction = data[(data.type == 'LV_Fiction A' ) & (data.language == 'eng')]

Find the most loaned-out English book at a single library, because why not

In [56]:
eng_fiction.ix[eng_fiction['total_loans'].idxmax()]
Out[56]:
borough                    Ahuntsic - Cartierville
location         (AHC) Ahuntsic / Adultes - Romans
creation_date                  2008-11-27 10:46:00
total_loans                                     74
year_loans                                       5
status                                  Disponible
type                                  LV_Fiction A
cote                                           NaN
title                          The brass verdict :
variant                                        NaN
author                          Connelly, Michael,
collaboration                                  NaN
publisher                   Little, Brown and Co.,
place                                   New York :
country                                        xxu
year                                         2008.
num_pages                                 422 p. ;
language                                       eng
collection                                     NaN
ISBN                             0316166294 (hbk.)
img_url                                        NaN
Name: 2415431, dtype: object

Find most loaned out English book

In [99]:
eng_counts = eng_fiction.groupby(['title', 'variant'])
eng_counts.aggregate(np.sum).sort('total_loans', ascending=False)
Out[99]:
total_loans year_loans
title variant
Millennium. Girl with the dragon tattoo. 1244 68
Nine dragons : 9 dragons 998 99
Fifty shades. Fifty shades of Grey 916 107
The lucky one : Lucky 1. 897 64
Millennium. Girl who kicked the hornets' nest 892 81
Girl who played with fire 882 55
Twenties girl : 20's girl. 822 50
61 hours : Sixty-one hours 802 107
10th anniversary / Tenth anniversary 716 74
I'll walk alone : I will walk alone 715 109
206 bones : Two hundred six bones. 708 60
The fifth witness : 5th witness 707 68
One day at a time / 1 day at a time. 698 48
A thousand splendid suns : A 1, 000 splendid suns. 677 36
Fifty shades. Fifty shades darker 675 73
44 Charles Street : Forty-four Charles Street 672 87
The Inn Boonsboro. Next always 645 77
Don't blink : Do not blink 632 58
The 6th target / Sixth target 632 68
Love the one you're with / Love the one you are with 603 48
You've been warned : You have been warned. 589 43
The 8th confession / Eighth confession. 588 62
The sixth man / 6th man 585 62
Fearless fourteen : Fearless 14. 580 49
The 9th judgment / Ninth judgment 579 39
Zero day : 0 day 565 63
The Hunger Games. Catching fire 554 43
Fire and ice : Fire & ice. 553 49
I've got your number : I have got your number 548 69
7th heaven / Seventh heaven 547 52
Beatrice & Virgil : Beatrice and Virgil 543 45
Smokin' seventeen : Smoking 17 540 61
Fifty shades. 50 shades freed 535 52
Finger lickin' fifteen : Finger lickin' 15. 533 36
Alex Cross's trial / Trial. 521 44
Ice cold : Rizzoli and Isles 518 43
11/22/63 : Eleven twenty-two sixty-three 516 94
The Clifton chronicles. Only time will tell 508 90
One summer / 1 summer 493 64
The Inn Boonsboro. Last boyfriend 491 85
Code to zero / Code to 0. 478 48
Hunger Games. Mockingjay 478 30
There's something about St. Tropez : There is something about Saint-Tropez. 476 42
First family / 1st family. 476 46
Sizzling sixteen : Sizzling 16 465 51
The Clifton chronicles. Sins of the father 460 111
For one more day / For 1 more day. 442 51
11th hour / Eleventh hour 440 128
At first sight / At 1st sight. 431 45
Now and then : Now & then. 431 33
Explosive eighteen : Explosive 18 426 80
Honor thyself / Honour thyself 425 36
Eight days to live : 8 days to live 416 44
Lean mean thirteen : Lean mean 13. 414 28
Robert Ludlum's the Bourne deception : Bourne deception. 407 28
KnockOut : Knock out 406 42
Heartstopper : Heart stopper 400 31
Bones : Alex Delaware novel. 393 40
The first rule : 1st rule 390 35
Eleven minutes : 11 minutes. 378 22
... ...

5021 rows × 2 columns

Do the same for French adult fiction

In [111]:
fre_fiction = data[(data.type == 'LV_Fiction A' ) & (data.language == 'fre')]
fre_counts = fre_fiction.groupby(['title', 'variant'])
fre_counts.aggregate(np.sum).sort('total_loans', ascending=False)
Out[111]:
total_loans year_loans
title variant
A.N.G.E. Agence nationale de gestion de l'Étrange. 4519 382
Mémoires d'un quartier. Laura 3779 187
Aya de Yopougon. Aya. 3466 317
Le maître magicien Negi Ma!. Maître magicien Negima!. 3270 259
Magasin général. Hommes 3202 162
Mémoires d'un quartier. Antoine, 1957-1958 3079 172
À l'ombre du clocher. Années folles. 3016 98
La dernière saison. Jeanne. 2955 142
À l'ombre du clocher. Fils de Gabrielle 2891 124
Millénium. Hommes qui n'aimaient pas les femmes. 2869 168
La poussière du temps. Rue de la Glacière. 2845 139
Mémoires d'un quartier. Évangéline, 1958-1959. 2833 195
Chère Laurette. Des rêves plein la tête 2831 166
À l'ombre du clocher. Amours interdites. 2770 116
Au bord de la rivière. Baptiste 2743 194
La dernière saison. Thomas 2717 172
Un bonheur si fragile. Drame 2717 180
Ikigami, préavis de mort. Ikigami. 2704 434
Millénium. Reine dans le palais des courants d'air 2679 163
Un bonheur si fragile. Engagement 2623 170
Mémoires d'un quartier. Bernadette, 1960-1962 2590 226
La poussière du temps. Sur le boulevard. 2578 115
Les portes de Québec. Faubourg Saint-Roch 2523 93
La poussière du temps. Au bout de la route. 2495 102
Chère Laurette. Retour 2489 141
Mémoires d'un quartier. Adrien, 1962-1963 2477 238
Marcel, 1965-1966 2450 216
À l'ombre du clocher. Au rythme des saisons 2442 132
Au bord de la rivière. Camille 2440 259
Mémoires d'un quartier. Francine, 1963-1965 2435 239
La première nuit : 1ère nuit 2380 179
Millénium. Fille qui rêvait d'un bidon d'essence et d'une allumette. 2377 138
Mémoires d'un quartier. Antoine, la suite, 1968-1969 2294 247
La diaspora des Desrosiers. Traversée du continent 2269 132
Les soeurs Deblois. Charlotte 2266 122
Mémoires d'un quartier. Laura, la suite, 1966-1968 2246 259
La poussière du temps. Rue Notre-Dame. 2246 122
Chère Laurette. À l'écoute du temps 2243 165
Un bonheur si fragile. Amours : 2242 263
Hell.com / Hell com 2188 167
Les folles années. Héritiers : 2169 145
Mémoires d'un quartier. Évangéline, la suite, 1969-1970 2158 312
Fanette. À la conquête de la haute ville 2144 88
Un bonheur si fragile. Épreuves 2122 145
Mémoires d'un quartier. Bernadette, la suite, 1970-1972 2115 314
La force de vivre. Rêves d'Edmond et Émilie 2101 89
XXX holic. XXXholic. 2094 304
Quatre saisons de fiançailles. Rêves en blanc 2076 134
Magasin général. Marie 2072 121
Chère Laurette. Fuite du temps 2071 177
Les soeurs Deblois. Émilie 2057 129
Anne 2051 137
La diaspora des Desrosiers. Traversée de la ville. 2043 133
Félicité. Pasteur et la brebis 2038 170
Au bord de la rivière. Xavier 2033 323
Quatre jours de pluie : 4 jours de pluie 2015 188
Les soeurs Deblois. Demi-frère 1994 135
Les années du silence. Délivrance 1972 98
Tourmente 1942 86
Sept jours pour une éternité-- : 7 jours pour une éternité -- 1936 94
... ...

17185 rows × 2 columns

What about French non-fiction?

In [121]:
fre_non_fiction = data[(data.type == 'LV_Documentaire A' ) & (data.language == 'fre')]
fre_nf_counts = fre_non_fiction.groupby(['title'])
fre_nf_counts.aggregate(np.sum).sort('total_loans', ascending=False)
Out[121]:
total_loans year_loans
title
Conduire un véhicule de promenade / 10016 418
Guide de la route / 8954 453
New York / 7496 1084
Cuba / 5233 440
Paris / 4972 582
La grammaire pour tous : 3485 218
L'art de conjuguer : 3443 286
Rome / 3239 502
Costa Rica / 3173 228
Mexique / 3134 284
Portugal / 3105 365
Londres / 2933 472
Math-o-matique : 2903 188
Pour réussir math 436 : 2476 194
Thaïlande / 2440 288
Barcelone / 2378 304
Vietnam / 2373 197
Turquie / 2358 361
Italie / 2349 247
Maroc / 2283 386
Chine / 2271 309
Floride / 2249 211
Le dessin de manga. 2217 202
Le secret / 2211 107
Espagne / 2186 250
Mange, prie, aime : 2091 61
Venise / 2050 414
La vie comme je l'aime. 1977 246
Conduire un véhicule lourd / 1958 159
Californie / 1895 250
Ma grammaire / 1879 156
Oeuvres complètes / 1871 313
Croatie / 1831 280
Parce qu'on a tous de la visite-- : 1809 87
L'orthographe pour tous : 1804 188
Prague / 1701 272
Provence / 1693 276
Oeuvres / 1677 249
Argentine / 1663 229
Pasta et cetera à la di Stasio : 1636 73
Canada / 1605 341
Comment j'ai vaincu la douleur et l'inflammation chronique par l'alimentation / 1514 87
Chagrin d'école / 1512 93
Inde / 1510 193
France / 1491 180
Pérou / 1461 203
Japon / 1440 189
Boston / 1434 265
Québec / 1432 304
Histoire populaire du Québec / 1381 199
Corse / 1358 263
Janine Sutto : 1354 144
Berlin / 1347 213
Cuisiner avec les aliments contre le cancer / 1343 104
Irlande / 1320 283
Andalousie / 1298 195
Entre cuisine et quincaillerie / 1293 77
Le français au bureau / 1260 93
Le meilleur de soi / 1245 79
Nouvelle-Angleterre / 1241 254
... ...

203529 rows × 2 columns

English non-fiction

In [120]:
eng_non_fiction = data[(data.type == 'LV_Documentaire A' ) & (data.language == 'eng')]
eng_nf_counts = eng_non_fiction.groupby(['title'])
eng_nf_counts.aggregate(np.sum).sort('total_loans', ascending=False)
Out[120]:
total_loans year_loans
title
Driving a passenger vehicle / 3490 189
Driver's handbook / 2960 195
National Geographic traveler. 2448 429
The secret / 768 52
Driving a heavy vehicle / 755 105
Eat, pray, love : 708 27
Bilingual visual dictionary. 669 70
A new earth : 652 41
The voice of Egypt : 649 2
Master the basics. 506 30
New french with ease 505 38
Oprah : 475 38
Outliers : 470 23
The shock doctrine : 466 28
Intermediate English grammar / 416 16
New England / 407 87
Real life : 397 42
The everything French grammar book : 394 18
Chicken soup for the soul : 391 94
Moon handbooks. 389 119
Blink : 376 20
Steve Jobs / 370 51
Cook with Jamie : 367 22
Painless French / 355 33
Canada : 348 72
Scott 2013 standard postage stamp catalogue / 345 73
Elementary English grammar / 333 18
Committed : 323 27
Florida / 314 30
Halloween : 305 51
How to prepare for the TOEFL test : 303 34
Life : 301 33
Fifty shades. 300 30
Time out. 299 29
O's guide to life : 294 29
Argentina / 287 42
Jamie's food revolution : 284 17
Infidel / 282 18
The complete idiot's guide to French verbs / 281 26
Italy / 276 66
God is not great : 272 25
The power of now : 271 15
O's big book of happiness : 268 27
Teach yourself visually Excel 2007 / 266 9
India / 259 37
Scott 2011 standard postage stamp catalogue / 259 57
A long way gone : 256 21
Spain / 253 51
French grammar / 253 9
What to expect when you're expecting / 253 16
Time Out. 248 46
The book of secrets : 246 13
My life / 246 35
The God delusion / 244 25
The complete idiot's guide to learning French / 242 14
The glass castle : 241 9
Life / 239 31
Smart shopping Montreal / 238 32
Great answers! great questions! : 234 24
The pregnancy bible : 234 19
... ...

104613 rows × 2 columns

Find the top three most loaned books per borough

In [58]:
top_boroughs = data.groupby(['borough','title'])
df2 = top_boroughs.aggregate(sum).reset_index().sort(['borough','total_loans'],ascending=[True,False]).set_index(['borough'])
df3 = pd.DataFrame()
for indx in df2.index.unique():
    df3 = pd.concat([df3, df2.ix[indx].iloc[0:3]])
df3
Out[58]:
title total_loans year_loans
Ahuntsic - Cartierville Naruto. 24271 1095
Ahuntsic - Cartierville Album Garfield. 10473 453
Ahuntsic - Cartierville Winx club. 8330 368
Anjou Naruto. 5867 315
Anjou Album Garfield. 2921 201
Anjou Winx club. 2755 201
Côte-des-Neiges - Notre-Dame-de-Grâce Naruto. 17039 702
Côte-des-Neiges - Notre-Dame-de-Grâce Détective Conan. 11472 471
Côte-des-Neiges - Notre-Dame-de-Grâce Album Garfield. 11023 446
L'Île Bizard - Sainte-Geneviève Album Garfield. 3079 178
L'Île Bizard - Sainte-Geneviève Les Simpson. 1205 47
L'Île Bizard - Sainte-Geneviève Les légendaires. 857 37
LaSalle Naruto. 8212 1051
LaSalle Détective Conan. 3232 618
LaSalle Yu-Gi-Oh. 3124 603
Lachine Les légendaires. 931 86
Lachine Mémoires d'un quartier. 840 169
Lachine Boule & Bill. 735 64
Mercier-Hochelaga-Maisonneuve Naruto. 17779 1017
Mercier-Hochelaga-Maisonneuve Album Garfield. 12373 789
Mercier-Hochelaga-Maisonneuve Les Simpson. 7343 463
Montréal-Nord Naruto. 8516 921
Montréal-Nord Album Garfield. 4115 408
Montréal-Nord Les Simpson. 2691 450
Outremont Naruto. 2879 249
Outremont Caillou. 1804 113
Outremont Les p'tits diables. 1383 64
Pierrefonds - Roxboro Naruto. 7629 390
Pierrefonds - Roxboro Les légendaires. 5459 371
Pierrefonds - Roxboro Album Garfield. 5119 176
Plateau-Mont-Royal Naruto. 6314 207
Plateau-Mont-Royal Album Garfield. 4430 272
Plateau-Mont-Royal Le trésor du pirate Boom [jeu] 3760 139
Rivière-des-Prairies - Pointe-aux-Trembles Naruto. 14329 682
Rivière-des-Prairies - Pointe-aux-Trembles One Piece. 6571 325
Rivière-des-Prairies - Pointe-aux-Trembles Bleach. 5074 430
Rosemont - La Petite-Patrie Naruto. 7446 753
Rosemont - La Petite-Patrie One Piece. 7179 622
Rosemont - La Petite-Patrie Album Garfield. 6985 469
Saint-Laurent Winx club. 4455 417
Saint-Laurent Détective Conan. 3551 168
Saint-Laurent Album Garfield. 3078 138
Saint-Léonard Naruto. 3999 232
Saint-Léonard Album Garfield. 2203 192
Saint-Léonard Paris Match [Saint-Léonard] 1653 797
Sans Arroundissement Naruto. 1376 265
Sans Arroundissement Album Garfield. 1351 122
Sans Arroundissement Le Lundi [Biblio-courrier] 984 583
Sud-Ouest Naruto. 10227 786
Sud-Ouest Album Garfield. 6310 398
Sud-Ouest Détective Conan. 4978 384
Verdun Les légendaires. 1879 164
Verdun Winx club. 1514 203
Verdun Nelson. 1396 102
Ville-Marie Naruto. 8571 456
Ville-Marie Yu-Gi-Oh. 2757 116
Ville-Marie Inu Yasha. 2257 154
Villeray - Saint-Michel - Parc-Extension Naruto. 18822 967
Villeray - Saint-Michel - Parc-Extension Album Garfield. 13788 454
Villeray - Saint-Michel - Parc-Extension Winx club. 10149 314

60 rows × 3 columns

English fiction

In [63]:
top_eng = eng_fiction.groupby(['borough','title'])
df2 = top_eng.aggregate(sum).reset_index().sort(['borough','total_loans'],ascending=[True,False]).set_index(['borough'])
df3 = pd.DataFrame()
for indx in df2.index.unique():
    df3 = pd.concat([df3, df2.ix[indx].iloc[0:3]])
df3
Out[63]:
title total_loans year_loans
Ahuntsic - Cartierville Millennium. 267 5
Ahuntsic - Cartierville Fifty shades. 213 19
Ahuntsic - Cartierville Harry Potter and the deathly hallows / 152 9
Anjou Fifty shades. 164 12
Anjou Tabous : roman 81 11
Anjou Millennium. 77 6
Côte-des-Neiges - Notre-Dame-de-Grâce Millennium. 631 30
Côte-des-Neiges - Notre-Dame-de-Grâce A song of ice and fire. 338 24
Côte-des-Neiges - Notre-Dame-de-Grâce The road / 259 16
L'Île Bizard - Sainte-Geneviève Percy Jackson & the Olympians. 119 8
L'Île Bizard - Sainte-Geneviève A song of ice and fire. 58 10
L'Île Bizard - Sainte-Geneviève Inheritance. 49 15
LaSalle Naruto. 1223 204
LaSalle Fifty shades. 380 43
LaSalle The walking dead. 302 51
Lachine Diary of a wimpy kid. 169 13
Lachine The walking dead. 165 16
Lachine Fifty shades. 75 11
Mercier-Hochelaga-Maisonneuve The overlook : 123 2
Mercier-Hochelaga-Maisonneuve Millennium. 98 9
Mercier-Hochelaga-Maisonneuve Tribute / 91 4
Montréal-Nord Fifty shades. 69 11
Montréal-Nord A song of ice and fire. 51 10
Montréal-Nord Midori days. 2 39 5
Outremont A song of ice and fire. 87 13
Outremont Millennium. 73 11
Outremont [The wheel of time. 72 5
Pierrefonds - Roxboro Millennium. 325 22
Pierrefonds - Roxboro Three complete novels : 280 23
Pierrefonds - Roxboro Bakuman. 251 65
Plateau-Mont-Royal Millennium. 144 8
Plateau-Mont-Royal The man who smiled / 100 3
Plateau-Mont-Royal Remember me? / 92 5
Rivière-des-Prairies - Pointe-aux-Trembles Tabous : roman 119 7
Rivière-des-Prairies - Pointe-aux-Trembles Fifty shades. 93 3
Rivière-des-Prairies - Pointe-aux-Trembles Millennium. 83 7
Rosemont - La Petite-Patrie Millennium. 150 10
Rosemont - La Petite-Patrie The lost symbol : 67 3
Rosemont - La Petite-Patrie The drop : 60 5
Saint-Laurent Batman : 493 71
Saint-Laurent Fifty shades. 255 45
Saint-Laurent Superman : 188 36
Saint-Léonard Fifty shades. 82 9
Saint-Léonard Private : 53 16
Saint-Léonard The help / 51 6
Sans Arroundissement Black Hills / 24 5
Sans Arroundissement Deeply Odd / 22 18
Sans Arroundissement Millennium. 16 3
Sud-Ouest Millennium. 302 18
Sud-Ouest Inubaka, Crazy for dogs. 211 24
Sud-Ouest Fifty shades. 150 13
Verdun Fifty shades. 111 5
Verdun A song of ice and fire. 98 15
Verdun Millennium. 83 12
Ville-Marie Rozen maiden. 43 2
Ville-Marie Aie woze djoking / 29 0
Ville-Marie Invisible / 28 3
Villeray - Saint-Michel - Parc-Extension Millennium. 353 18
Villeray - Saint-Michel - Parc-Extension Fifty shades. 187 20
Villeray - Saint-Michel - Parc-Extension The road / 108 2

60 rows × 3 columns

French fiction

In [65]:
top_fre = fre_fiction.groupby(['borough','title'])
df2 = top_fre.aggregate(sum).reset_index().sort(['borough','total_loans'],ascending=[True,False]).set_index(['borough'])
df3 = pd.DataFrame()
for indx in df2.index.unique():
    df3 = pd.concat([df3, df2.ix[indx].iloc[0:3]])
df3
Out[65]:
title total_loans year_loans
Ahuntsic - Cartierville Mémoires d'un quartier. 2978 222
Ahuntsic - Cartierville À l'ombre du clocher. 1526 41
Ahuntsic - Cartierville Les chevaliers d'Émeraude. 1468 104
Anjou Mémoires d'un quartier. 1185 180
Anjou Lieutenant Eve Dallas. 852 91
Anjou Les années du silence. 634 33
Côte-des-Neiges - Notre-Dame-de-Grâce L'histoire secrète. 1262 126
Côte-des-Neiges - Notre-Dame-de-Grâce La geste des chevaliers dragons. 1232 107
Côte-des-Neiges - Notre-Dame-de-Grâce Trolls de Troy. 1228 105
L'Île Bizard - Sainte-Geneviève Mémoires d'un quartier. 456 32
L'Île Bizard - Sainte-Geneviève Les chevaliers d'Émeraude. 450 49
L'Île Bizard - Sainte-Geneviève À l'ombre du clocher. 305 8
LaSalle Naruto. 5697 737
LaSalle One Piece. 2948 541
LaSalle Détective Conan. 1860 501
Lachine Mémoires d'un quartier. 840 169
Lachine Les nombrils. 301 17
Lachine Au bord de la rivière. 289 78
Mercier-Hochelaga-Maisonneuve Mémoires d'un quartier. 3309 246
Mercier-Hochelaga-Maisonneuve Lieutenant Eve Dallas. 2034 121
Mercier-Hochelaga-Maisonneuve A.N.G.E. 1812 93
Montréal-Nord Naruto. 6956 790
Montréal-Nord Bleach. 1792 169
Montréal-Nord Mémoires d'un quartier. 1530 229
Outremont Les psy. 492 52
Outremont Les naufragés d'Ythaq. 457 9
Outremont Sillage. 426 32
Pierrefonds - Roxboro Mémoires d'un quartier. 1462 118
Pierrefonds - Roxboro Les chevaliers d'Émeraude. 1248 62
Pierrefonds - Roxboro Le journal d'Aurélie Laflamme. 1009 30
Plateau-Mont-Royal L'histoire secrète. 1367 125
Plateau-Mont-Royal Magasin général. 1079 45
Plateau-Mont-Royal Trolls de Troy. 1006 69
Rivière-des-Prairies - Pointe-aux-Trembles Mémoires d'un quartier. 4566 288
Rivière-des-Prairies - Pointe-aux-Trembles Lieutenant Eve Dallas. 1735 114
Rivière-des-Prairies - Pointe-aux-Trembles La poussière du temps. 1655 36
Rosemont - La Petite-Patrie Mémoires d'un quartier. 2020 243
Rosemont - La Petite-Patrie Magasin général. 1479 52
Rosemont - La Petite-Patrie Walking dead. 1214 96
Saint-Laurent Mémoires d'un quartier. 813 96
Saint-Laurent Walking dead. 507 113
Saint-Laurent L'histoire secrète. 359 96
Saint-Léonard Mémoires d'un quartier. 926 36
Saint-Léonard Un bonheur si fragile. 289 19
Saint-Léonard A.N.G.E. 267 22
Sans Arroundissement Mémoires d'un quartier. 615 118
Sans Arroundissement Un bonheur si fragile. 295 32
Sans Arroundissement À l'ombre du clocher. 287 12
Sud-Ouest Mémoires d'un quartier. 1621 131
Sud-Ouest Bleach. 1149 100
Sud-Ouest Death note. 1091 67
Verdun One Piece. 826 193
Verdun Mémoires d'un quartier. 566 52
Verdun Les chevaliers d'Émeraude. 316 47
Ville-Marie Samuraï Deeper Kyô. 1155 58
Ville-Marie Mémoires d'un quartier. 1142 160
Ville-Marie Death note. 1038 65
Villeray - Saint-Michel - Parc-Extension Mémoires d'un quartier. 2199 204
Villeray - Saint-Michel - Parc-Extension Magasin général. 1860 79
Villeray - Saint-Michel - Parc-Extension L'histoire secrète. 1695 241

60 rows × 3 columns

Non-fiction

In [66]:
non_fic = data[data.type == 'LV_Documentaire A' ]
top_nf = non_fic.groupby(['borough','title'])
df2 = top_nf.aggregate(sum).reset_index().sort(['borough','total_loans'],ascending=[True,False]).set_index(['borough'])
df3 = pd.DataFrame()
for indx in df2.index.unique():
    df3 = pd.concat([df3, df2.ix[indx].iloc[0:3]])
df3
Out[66]:
title total_loans year_loans
Ahuntsic - Cartierville Guide de la route / 1418 48
Ahuntsic - Cartierville Conduire un véhicule de promenade / 1213 37
Ahuntsic - Cartierville New York / 1161 74
Anjou Guide de la route / 616 38
Anjou Conduire un véhicule de promenade / 511 28
Anjou L'art de conjuguer : 184 17
Côte-des-Neiges - Notre-Dame-de-Grâce Conduire un véhicule de promenade / 1300 31
Côte-des-Neiges - Notre-Dame-de-Grâce Driving a passenger vehicle / 882 18
Côte-des-Neiges - Notre-Dame-de-Grâce New York / 620 101
L'Île Bizard - Sainte-Geneviève Conduire un véhicule de promenade / 106 9
L'Île Bizard - Sainte-Geneviève Paris / 100 12
L'Île Bizard - Sainte-Geneviève Aux confins de Montréal : l'île Bizard, des or... 99 11
LaSalle Je cuisine : 563 77
LaSalle Guide de la route / 370 16
LaSalle Je décore : 340 86
Lachine Guide de la route / 204 8
Lachine Conduire un véhicule de promenade / 127 6
Lachine Scott 2013 standard postage stamp catalogue / 104 0
Mercier-Hochelaga-Maisonneuve Cuba / 835 48
Mercier-Hochelaga-Maisonneuve New York / 739 56
Mercier-Hochelaga-Maisonneuve Guide de la route / 677 22
Montréal-Nord Guide de la route / 521 16
Montréal-Nord Conduire un véhicule de promenade / 487 14
Montréal-Nord Math-o-matique : 234 28
Outremont New York / 439 38
Outremont Paris / 362 35
Outremont Portugal / 224 16
Pierrefonds - Roxboro Guide de la route / 595 20
Pierrefonds - Roxboro Conduire un véhicule de promenade / 563 22
Pierrefonds - Roxboro Driver's handbook / 495 18
Plateau-Mont-Royal New York / 605 63
Plateau-Mont-Royal Guide de la route / 489 23
Plateau-Mont-Royal Cuba / 424 20
Rivière-des-Prairies - Pointe-aux-Trembles Le dessin de manga. 886 57
Rivière-des-Prairies - Pointe-aux-Trembles New York / 645 67
Rivière-des-Prairies - Pointe-aux-Trembles Cuba / 388 36
Rosemont - La Petite-Patrie Conduire un véhicule de promenade / 875 34
Rosemont - La Petite-Patrie Guide de la route / 782 63
Rosemont - La Petite-Patrie New York / 723 113
Saint-Laurent Driver's handbook / 394 33
Saint-Laurent Conduire un véhicule de promenade / 351 24
Saint-Laurent Paris / 336 85
Saint-Léonard L'art de conjuguer : 241 18
Saint-Léonard Guide de la route / 233 21
Saint-Léonard La grammaire pour tous : 174 11
Sans Arroundissement Y'a des moments si merveilleux--" :" 52 5
Sans Arroundissement L'énigmatique Céline Dion : 49 2
Sans Arroundissement Thérèse Dion : 47 2
Sud-Ouest Conduire un véhicule de promenade / 583 33
Sud-Ouest Guide de la route / 316 16
Sud-Ouest New York / 293 33
Verdun Conduire un véhicule de promenade / 279 25
Verdun New York / 205 61
Verdun Guide de la route / 168 13
Ville-Marie New York / 273 41
Ville-Marie Conduire un véhicule de promenade / 244 20
Ville-Marie Guide de la route / 204 10
Villeray - Saint-Michel - Parc-Extension Conduire un véhicule de promenade / 1733 66
Villeray - Saint-Michel - Parc-Extension Guide de la route / 1416 68
Villeray - Saint-Michel - Parc-Extension La grammaire pour tous : 628 16

60 rows × 3 columns

In [ ]: