{"cells":[{"metadata":{"_uuid":"136806d82bed41ce56ea8a352e74e96e83be803c"},"cell_type":"markdown","source":"**** Background****\n\n> When 2 protons collide, the tracks they follow consequently tell us a lot about the protons themselves.\nFor eg, their direction of curvature of these tracks tells us if the generated particle is positivelly or negatively charged \nand then also how large is this radius of curvature that directly relates to the velocity and the momentum of the particle.\n\n\nEach hit is the event of the detector sensing the particle on the detector surface.\n\nThere will be a set of hits (corresponding to set of places where a single particle was detected) following a single track. We need to associate these hits to the correct track. \n\nParticles produced in collisions normally travel in straight lines, but in the presence of a magnetic field their paths become curved. Electromagnets around particle detectors generate magnetic fields to exploit this effect. Physicists can calculate the momentum of a particle – a clue to its identity – from the curvature of its path: particles with high momentum travel in almost straight lines, whereas those with very low momentum move forward in tight spirals inside the detector.\n(https://home.cern/about/how-detector-works)\n\nModern particle detectors consist of layers of subdetectors, each designed to look for particular properties, or specific types of particle.\n\n#### Goal \nThe goal of the tracking machine learning challenge is to group the recorded measurements or hits for each event into tracks, sets of hits that belong to the same initial particle. A solution must uniquely associate each hit to one track.\n \n#### Approach\n\nThese grouping labels need not be one of the known particle_ids in particular from the training data ,but an arbitrary label ('track_id', in this context),common for a set of hit_ids.For the test data,the number of track_ids is not known,i.e, it is not known how many hits may be mapped to a single particle. \n\nHence, this problem can be be solved with an unsupervised clustering approach."},{"metadata":{"trusted":true,"collapsed":true,"_uuid":"341ff66de5a2d62349ecb395c54a9bf7ec487d3b"},"cell_type":"code","source":"import pandas as pd\nimport featuretools as ft\nimport matplotlib.pyplot as plt\nimport seaborn as sns","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"c78a42cfc48191b4da1af71cc12e212eb386622d"},"cell_type":"markdown","source":"#### Data\n\nThe dataset comprises multiple independent events, where each event contains simulated measurements (essentially 3D points) of particles generated in a collision between proton bunches at the Large Hadron Collider at CERN. \n#### Exploring train_sample  files"},{"metadata":{"trusted":true,"_uuid":"510e11b62d49a0fb84aebd701aaa878664ca4a07","collapsed":true},"cell_type":"code","source":"# choosing event event000002387\ndf_particle = pd.read_csv(\"../input/train_1/event000002387-particles.csv\") ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"collapsed":true,"_uuid":"ce16f7ac7daec610b3253ad5f783ab1f7a42e261"},"cell_type":"code","source":"df_hits = pd.read_csv(\"../input/train_1/event000002387-hits.csv\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"collapsed":true,"_uuid":"6ebe255ea49767872559c75c753ef3ff1bfd6dda"},"cell_type":"code","source":"df_cells = pd.read_csv(\"../input/train_1/event000002387-cells.csv\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"collapsed":true,"_uuid":"30b303a66af3a2935ac764fe480a8b1dceab173a"},"cell_type":"code","source":"df_truth = pd.read_csv(\"../input/train_1/event000002387-truth.csv\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"86a34a8d1fa19b5b374abe517711280ed8823ca0","collapsed":true},"cell_type":"code","source":"df_particle.shape","execution_count":null,"outputs":[]},{"metadata":{"scrolled":true,"trusted":true,"_uuid":"05fd5adbb147d9233adb126b9953b0ed0a7b0dc5","collapsed":true},"cell_type":"code","source":"df_hits.isnull().sum()","execution_count":null,"outputs":[]},{"metadata":{"scrolled":false,"trusted":true,"_uuid":"b77f57dd31dddf1a2cbd5276f749a92878a21f3c","collapsed":true},"cell_type":"code","source":"df_hits.info()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"2f29a4e678a87c1b25790473629c3e8a3adf4875","collapsed":true},"cell_type":"code","source":"df_particle.isnull().sum()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"5f889f1aba1bb742e8d17d9634ee527897600866","collapsed":true},"cell_type":"code","source":"df_particle.info()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"f3592699d3744583c4e49fcaa7cb2a314003c2e5","collapsed":true},"cell_type":"code","source":"df_truth.isnull().sum()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"d24c118e5720c823e8156debd51f507d4b4cebc2","collapsed":true},"cell_type":"code","source":"df_truth.info()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"1a2e1d62d68c0d6e07866592fca4bb92672e7cdd","collapsed":true},"cell_type":"code","source":"df_cells.isnull().sum()","execution_count":null,"outputs":[]},{"metadata":{"scrolled":true,"trusted":true,"_uuid":"7fe331c2609fb40f19ff1ff96854b163c482b681","collapsed":true},"cell_type":"code","source":"df_cells.info()","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"2bee14a47f535817c19cda052ff4650e9f9564c9"},"cell_type":"markdown","source":"Hits\n* hit_id: numerical identifier of the hit inside the event.\n* x, y, z: measured x, y, z position (in millimeter) of the hit in global coordinates.\n* volume_id: numerical identifier of the detector group.\n* layer_id: numerical identifier of the detector layer inside the group.\n* module_id: numerical identifier of the detector module inside the layer."},{"metadata":{"scrolled":true,"trusted":true,"_uuid":"d78632b837fdc53963b5f752cb2c51ad1a60346a","collapsed":true},"cell_type":"code","source":"df_hits.head(7)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"7574e353ba42c3b2e4ed3621307fbde50bda49b7","collapsed":true},"cell_type":"code","source":"df_hits.describe()","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"e968e96cf61805b0d4fbe2092a84e305f1899282"},"cell_type":"markdown","source":"Particles-\n* particle_id: numerical identifier of the particle inside the event.\n* vx, vy, vz: initial position or vertex (in millimeters) in global coordinates.\n* px, py, pz: initial momentum (in GeV/c) along each global axis.\n* q: particle charge (as multiple of the absolute electron charge).\n* nhits: number of hits generated by this particle."},{"metadata":{"scrolled":true,"trusted":true,"_uuid":"6f64702cd556925b5f3b7f57836311ea2b774bfe","collapsed":true},"cell_type":"code","source":"df_particle.head()","execution_count":null,"outputs":[]},{"metadata":{"scrolled":true,"trusted":true,"_uuid":"a1182be45380efc131ffa2f730f8c8fb4355e4dd","collapsed":true},"cell_type":"code","source":"df_particle.tail()","execution_count":null,"outputs":[]},{"metadata":{"scrolled":true,"trusted":true,"_uuid":"cfd12db69cd59b56e058e5f584ad9cff85fe4e3c","collapsed":true},"cell_type":"code","source":"df_particle.describe()","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"da9697d885e334e4006208a6276107ecde7b1679"},"cell_type":"markdown","source":"Truth-\nThe truth file contains the mapping between hits and generating particles and the true particle state at each measured hit. Each entry maps one hit to one particle.\n\n* hit_id: numerical identifier of the hit as defined in the hits file.\n* particle_id: numerical identifier of the generating particle as defined in the particles file. A value of 0 means that the hit did not originate from a reconstructible particle, but e.g. from detector noise.\n* tx, ty, tz true intersection point in global coordinates (in millimeters) between the particle trajectory and the sensitive surface.\n* tpx, tpy, tpz true particle momentum (in GeV/c) in the global coordinate system at the intersection point. The corresponding vector is tangent to the particle trajectory at the intersection point.\n* weight per-hit weight used for the scoring metric; total sum of weights within one event equals to one.\n\n(Note:- Multiple hits can belong to the same particle (at different cooridinates) . That is how we will get a track of a single particle with multiple hits (sites of sensing) along its path of travel."},{"metadata":{"scrolled":false,"trusted":true,"_uuid":"0bd9922921b4d646fbfa7e5ee5f90a943a27fcb3","collapsed":true},"cell_type":"code","source":"df_truth.head()","execution_count":null,"outputs":[]},{"metadata":{"scrolled":false,"trusted":true,"_uuid":"bc2587552412b5748701d854969b8892c2c31d5d","collapsed":true},"cell_type":"code","source":"df_truth.tail()","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"81487a286d590d2c6bd18b58b4a85347601f715f"},"cell_type":"markdown","source":"Cells\n\nThe cells file contains the constituent active detector cells that comprise each hit. The cells can be used to refine the hit to track association. A cell is the smallest granularity inside each detector module, much like a pixel on a screen, except that depending on the volume_id a cell can be a square or a long rectangle. It is identified by two channel identifiers that are unique within each detector module and encode the position, much like column/row numbers of a matrix. A cell can provide signal information that the detector module has recorded in addition to the position. Depending on the detector type only one of the channel identifiers is valid, e.g. for the strip detectors, and the value might have different resolution.\n\n* hit_id: numerical identifier of the hit as defined in the hits file.\n* ch0, ch1: channel identifier/coordinates unique within one module.\n* value: signal value information, e.g. how much charge a particle has deposited."},{"metadata":{"scrolled":true,"trusted":true,"_uuid":"45ca4c7eb3bad52f2a1d0559653238d3d32e12fa","collapsed":true},"cell_type":"code","source":"df_cells.head()","execution_count":null,"outputs":[]},{"metadata":{"scrolled":false,"trusted":true,"_uuid":"0543934a2da26de168c7b5c1e04970fff37c87b7"},"cell_type":"code","source":"df_cells.tail()","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"45aa35d9c97f774b27353dfb8ad3f36adc8a6222"},"cell_type":"markdown","source":"> At index 669470 and 669471 we have different cell coordinates for the same hit_id 121511"},{"metadata":{"_uuid":"8b6e68f186c63ca41b5ce108c8c345391d184587"},"cell_type":"markdown","source":"#### Exploring detectors file"},{"metadata":{"trusted":true,"_uuid":"afa779ce1d2e2a871f8c263ac31f545ab41f967e","collapsed":true},"cell_type":"code","source":"# This file contains additional detector geometry information.\n\ndf_detectors = pd.read_csv(\"../input/detectors.csv\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"75867d477471c1b64b22739465d07f524a899f4a","collapsed":true},"cell_type":"code","source":"# Each module has a different position and orientation described in the detectors file.\n\ndf_detectors.head(7)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"0ea4e87bea12e08be46d38cf06a400b4151527b7","collapsed":true},"cell_type":"code","source":"df_hits.nunique()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"d9ef423eb3c15807cd24ec19502a3cb8e51bd6c2","collapsed":true},"cell_type":"code","source":"df_hits.volume_id.unique()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"02a8865d75e8acbf772946b97d3e246b582a700c","collapsed":true},"cell_type":"code","source":"df_hits.layer_id.unique()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"4d765810a2a2b70195d9cbd2f8d19b239a8d4ac0","collapsed":true},"cell_type":"code","source":"df_hits.module_id.unique()","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"b8a699b07756c0dfc9daafaf1850699e05b9288d"},"cell_type":"markdown","source":"#### Exploring test file\n\nIt is the test dataset with 125 events\n\nThe submission file must associate each hit in each event to one and only one reconstructed particle track. The reconstructed tracks must be uniquely identified only within each event. "},{"metadata":{"trusted":true,"collapsed":true,"_uuid":"e9386c851236b7f7c021a95a87c449b5c675d9c1"},"cell_type":"code","source":"df_test_hits = pd.read_csv('../input/test/event000000008-hits.csv')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"collapsed":true,"_uuid":"b4778e560a0a708d6decc580efdce2ed50df488e"},"cell_type":"code","source":"df_test_cells = pd.read_csv('../input/test/event000000008-cells.csv')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"5ca4e5eff96a119631ed10abcdc9e661429c1293","collapsed":true},"cell_type":"code","source":"df_test_hits.info()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"a9f33ed0a37e76f69c32b92117413c249737ca9d","collapsed":true},"cell_type":"code","source":"df_test_hits.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"8167715540d7a5b0beb7bc6541d22dcb3a6470f8","collapsed":true},"cell_type":"code","source":"df_test_hits.tail()","execution_count":null,"outputs":[]},{"metadata":{"scrolled":false,"trusted":true,"_uuid":"ad1a7f80a76da98a208b8233a5cb4d2f3912fe8c","collapsed":true},"cell_type":"code","source":"df_test_cells.info()","execution_count":null,"outputs":[]},{"metadata":{"scrolled":true,"trusted":true,"_uuid":"1d17d0634ebdea9e89858773690a9d8d6ee2dd25","collapsed":true},"cell_type":"code","source":"df_test_cells.head()","execution_count":null,"outputs":[]},{"metadata":{"scrolled":true,"trusted":true,"_uuid":"5d429d05da469bf51b28c0fd40b3f09f98bcb902","collapsed":true},"cell_type":"code","source":"df_test_cells.tail()","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"597ff79c7663e571582a5d2f861fcdce3ef7aa02"},"cell_type":"markdown","source":"#### Feature engineering from training data"},{"metadata":{"trusted":true,"collapsed":true,"_uuid":"38d7b3cfe3a6218968327f978fb7f0151d91ec2d"},"cell_type":"code","source":"## Creating Entity set\n\nes = ft.EntitySet(id=\"hits\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"collapsed":true,"_uuid":"b20cbd5e119fbd413ae26a5020ebfe387c5c5b0f"},"cell_type":"code","source":"es1 = es.entity_from_dataframe(entity_id='hits', dataframe=df_hits,\n                               index = 'hit_id',\n                               variable_types = { \"volume_id\":ft.variable_types.Categorical,\n                                                  \"layer_id\":ft.variable_types.Categorical,\n                                                  \"module_id\":ft.variable_types.Categorical })","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"bbb72a0535c606d1c5741e26ee9c736cb96f1eaf","collapsed":true},"cell_type":"code","source":"es1['hits'].variables","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"collapsed":true,"_uuid":"449c55857cdaaed2ecbbc85f819ee92e44463d88"},"cell_type":"code","source":"es2 = es1.entity_from_dataframe(entity_id='particle', dataframe=df_particle,\n                               index = 'particle_id' )","execution_count":null,"outputs":[]},{"metadata":{"scrolled":false,"trusted":true,"_uuid":"d27c1cfc36144497f792f1efcfc7804eb4fd5c87","collapsed":true},"cell_type":"code","source":"es2['particle']","execution_count":null,"outputs":[]},{"metadata":{"scrolled":true,"trusted":true,"_uuid":"1f9f330e5cd262a32915c64d708b54835733be34","collapsed":true},"cell_type":"code","source":"df_cells.info()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"collapsed":true,"_uuid":"cb1d596026e7ed7e045c416a84c21eff427edcdf"},"cell_type":"code","source":"df_cells.reset_index(inplace=True)","execution_count":null,"outputs":[]},{"metadata":{"scrolled":false,"trusted":true,"_uuid":"2d4f4bc0475818733138da744f308591986e42bc","collapsed":true},"cell_type":"code","source":"df_cells.head()                                    # value column signifies the amount of charge deposited by the particle","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"3c2712b0a524daa429f08677f75bcb5bf029c35a","collapsed":true},"cell_type":"code","source":"df_cells.tail()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"collapsed":true,"_uuid":"3405ef2e7d9e1bb79a4e24e356c5d9202caeffea"},"cell_type":"code","source":"es3 = es2.entity_from_dataframe(entity_id='cells', dataframe=df_cells,index='index'  )","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"collapsed":true,"_uuid":"fada04b61de86d5381560d2f5895b7ab9af2dd46"},"cell_type":"code","source":"es4 = es3.entity_from_dataframe(entity_id='truth',dataframe=df_truth, index='hit_id')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"collapsed":true,"_uuid":"0664a18c079d998f7b0033de90a9beffd4e300a2"},"cell_type":"code","source":"df_detectors.reset_index(inplace=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"collapsed":true,"_uuid":"2358a7f501313faa3cfdd70463ca63ebfde952be"},"cell_type":"code","source":"es5 = es4.entity_from_dataframe(entity_id='detectors', dataframe=df_detectors, index='index')","execution_count":null,"outputs":[]},{"metadata":{"scrolled":false,"trusted":true,"_uuid":"7a6b676dad5b35e091493229489a82887c71c3f7","collapsed":true},"cell_type":"code","source":"es5","execution_count":null,"outputs":[]},{"metadata":{"scrolled":true,"trusted":true,"_uuid":"b03ceafa3c61d61b7c416006d1bf1cdbe721d5d2","collapsed":true},"cell_type":"code","source":"es5.entities","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"collapsed":true,"_uuid":"f702b2a35e3adc63b46d6db171eeea6af12d57f8"},"cell_type":"code","source":"# Defining one-to-many relationships among features of different entities\n\nrelation1 = ft.Relationship(es5['hits']['hit_id'],es5['cells']['hit_id'])\n\nrelation2 = ft.Relationship(es5['particle']['particle_id'],es5['truth']['particle_id'])","execution_count":null,"outputs":[]},{"metadata":{"scrolled":true,"trusted":true,"_uuid":"052526cd4a9f927add7108b211c9b7d153f2a82c","collapsed":true},"cell_type":"code","source":"es5","execution_count":null,"outputs":[]},{"metadata":{"scrolled":false,"trusted":true,"_uuid":"90dd42b1df205c88883b109971c4369cab1d79a6","collapsed":true},"cell_type":"code","source":"es5.add_relationships([relation1,relation2])","execution_count":null,"outputs":[]},{"metadata":{"scrolled":true,"trusted":true,"_uuid":"f4b26ad26679060a670809182079a21ecfc1011a","collapsed":true},"cell_type":"code","source":"es5.entities","execution_count":null,"outputs":[]},{"metadata":{"scrolled":true,"trusted":true,"_uuid":"bdc8d237e8a27507e98b3ff2e9ddf6c6788dab83","collapsed":true},"cell_type":"code","source":"%time feature_matrix, features = ft.dfs(entityset=es5, target_entity='particle',agg_primitives=['min','max'],max_depth=2)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"b4b68f88fa6072bd95eeb67f0448ec9902415df4","collapsed":true},"cell_type":"code","source":"df_particle.head(1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"b565b7bcf30193cb8ca03416b224144161194ad2","collapsed":true},"cell_type":"code","source":"df_truth.head(1)","execution_count":null,"outputs":[]},{"metadata":{"scrolled":true,"trusted":true,"_uuid":"b92518fc8c47f5903e1eaefece0d1a29839a94b3","collapsed":true},"cell_type":"code","source":"feature_matrix","execution_count":null,"outputs":[]},{"metadata":{"scrolled":true,"trusted":true,"_uuid":"56aa029432bb9763f7803d7a6fdbfd65cf7b62fa","collapsed":true},"cell_type":"code","source":"features","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"bed1cf8819f003dd3157f73b289445b0fb04d922"},"cell_type":"markdown","source":"####  Linking df_hits, df_truth and df_particle for the same hit_id"},{"metadata":{"scrolled":true,"trusted":true,"_uuid":"cdf099e1fc5a92b8cb96395dfdf66d29fde9fd5e","collapsed":true},"cell_type":"code","source":"df_hits.head(2)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"46c7740c8d502d634c5809907de236e9bf69138e","collapsed":true},"cell_type":"code","source":"df_particle.head(2)","execution_count":null,"outputs":[]},{"metadata":{"scrolled":false,"trusted":true,"_uuid":"241112bdfa66a0ceb43ff29bb35dc3a510cb78ec","collapsed":true},"cell_type":"code","source":"df_truth.head(2)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"f0bdbd0b624e1e093c72609ba935b267486f0ca3"},"cell_type":"markdown","source":"** tx, ty, tz ** : true intersection point in global coordinates (in millimeters) between the particle trajectory and the sensitive surface (df_truth).\n \n** x, y, z **: measured x, y, z position (in millimeter) of the hit in global coordinates (df_hits). \n\n--The above observations from df_hits and df_truth for the same hit_ids are quite close to each other but not identical."},{"metadata":{"scrolled":true,"trusted":true,"_uuid":"2670fda8c80d93b27c30b9be909cbdb3f26d4275","collapsed":true},"cell_type":"code","source":"# obtaining the number of times each particle was detected\n\ndf_truth.groupby('particle_id')['hit_id'].count()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"collapsed":true,"_uuid":"36e591131f9f7b8663e2386581ea0a812258eee5"},"cell_type":"code","source":"temp = df_truth[df_truth['particle_id']==4503874505277440]","execution_count":null,"outputs":[]},{"metadata":{"scrolled":false,"trusted":true,"_uuid":"cf8324d97c336ab494978a7132d97aa75993d697","collapsed":true},"cell_type":"code","source":"temp","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"c4c382ef88dbfea44f3e75a943c2287319627ef5","collapsed":true},"cell_type":"code","source":"temp.weight.sum()","execution_count":null,"outputs":[]},{"metadata":{"scrolled":true,"trusted":true,"_uuid":"c804717d8fb92743cb29e585c163e55190429017","collapsed":true},"cell_type":"code","source":"temp.count()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"0bcb9766148aae675fce038c5505033b13dd8ed9","collapsed":true},"cell_type":"code","source":"# the above particle was sensed/detected at 12 different positions on the detector as observed in df_particle dataframe below.\n\ndf_particle[df_particle['particle_id']==4503874505277440]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"collapsed":true,"_uuid":"bfca9bca9d40ea09d48681ef5b0c558681c24020"},"cell_type":"code","source":"hits_list = temp.hit_id.tolist()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"694a2079c685433edd6860a9817ef78848d182ec","collapsed":true},"cell_type":"code","source":"df_hits.loc[hits_list]","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"collapsed":true,"_uuid":"0c164dd5c8fb6c2d73b7b8c85a00eb5a3296b77d"},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.5","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}