{ "metadata": { "name": "", "signature": "sha256:7d8033aa6725c235edaef1822d484fdacd1dfdb11e9c1399767687e6bdd36465" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "### Baby names iPython notebooks #\n", "\n", " * By David Taylor, [www.prooffreader.com](http://www.prooffreader.com)\n", " * using data from United States Social Security Administration\n", " * I am making this public to give a head start to those who want to explore this dataset, so they don't have to download and format the data and the python objects used to do preliminary analysis. Please let me know if you find this helpful!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Find singletons #" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " * The database only shows names that appear at least five times in a given year. This script will find names that appeared only in a single year." ] }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "Set working path, and import libraries and read dataframe pickles" ] }, { "cell_type": "code", "collapsed": false, "input": [ "last_year = 2013 #change this when Social Security database is updated\n", "save_path = \"user_singletons\" # files created by this notebook will be saved in this directory\n", "\n", "import time\n", "import os\n", "if not os.path.isdir(save_path): # creates path if it does not exist\n", " os.makedirs(save_path)\n", "\n", "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "#import seaborn # comment out if you don't have it, but it makes good-looking charts\n", "%run download_and_process.py\n", "\n", "# used to round limit of y axis up to second-most-significant digit\n", "def determine_y_limit(x): \n", " significance = int(floor((log10(x))))\n", " val = floor(x / (10 ** (significance - 1))) + 1\n", " val = val * (10 ** (significance - 1))\n", " return val" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Data already downloaded.\n", "Data already extracted.\n", "Reading from pickle.\n", "Tail of dataframe 'yob':" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " name sex births year pct ranked\n", "1792086 Zyhier M 5 2013 0.000267 12995\n", "1792087 Zylar M 5 2013 0.000267 12995\n", "1792088 Zymari M 5 2013 0.000267 12995\n", "1792089 Zymeer M 5 2013 0.000267 12995\n", "1792090 Zyree M 5 2013 0.000267 12995\n", "\n", "Tail of dataframe 'names':\n", " name sex year_count year_min year_max pct_sum pct_max\n", "102685 Gross M 1 1925 1925 0.000538 0.000538\n", "102686 Elik M 1 2012 2012 0.000318 0.000318\n", "102687 Patrickjoseph M 1 1998 1998 0.000262 0.000262\n", "102688 Southern M 1 1923 1923 0.000547 0.000547\n", "102689 Jeon M 1 1999 1999 0.000261 0.000261\n", "\n", "Tail of dataframe 'years':\n", " year births_f births_m births_t new_names unique_names sexratio\n", "128 2008 1886765 2035811 3922576 2046 32483 107.899553\n", "129 2009 1832276 1978582 3810858 1789 32210 107.984932\n", "130 2010 1771846 1912915 3684761 1635 31593 107.961696\n", "131 2011 1752198 1891800 3643998 1539 31412 107.967250\n", "132 2012 1751866 1886972 3638838 1531 31212 107.712120" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "df_oneyear = names[names.year_min == names.year_max]\n", "df_oneyear = df_oneyear[['name', 'sex', 'year_min', 'pct_max']]\n", "df_oneyear.columns = ['name', 'sex', 'year', 'pct']" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 2 }, { "cell_type": "code", "collapsed": false, "input": [ "oneyearnames = list(df_oneyear.name.unique())\n", "yobcopy = yob.copy()\n", "yobcopy = yobcopy[yobcopy.name.isin(oneyearnames)]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 4 }, { "cell_type": "code", "collapsed": false, "input": [ "df_oneyear['births'] = 0\n", "for i in range(len(df_oneyear)):\n", " df_oneyear.births.iloc[i] = yobcopy[(yobcopy.name == df_oneyear.name.iloc[i]) & \n", " (yobcopy.sex == df_oneyear.sex.iloc[i])].births.iloc[0]" ], "language": "python", "metadata": {}, "outputs": [ { "ename": "KeyboardInterrupt", "evalue": "", "output_type": "pyerr", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[1;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[0mdf_oneyear\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'births'\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m0\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdf_oneyear\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m df_oneyear.births.iloc[i] = yobcopy[(yobcopy.name == df_oneyear.name.iloc[i]) & \n\u001b[0m\u001b[0;32m 4\u001b[0m (yobcopy.sex == df_oneyear.sex.iloc[i])].births.iloc[0]\n", "\u001b[1;32mC:\\Users\\David\\Anaconda\\lib\\site-packages\\pandas\\core\\ops.pyc\u001b[0m in \u001b[0;36mwrapper\u001b[1;34m(self, other)\u001b[0m\n\u001b[0;32m 553\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 554\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 555\u001b[1;33m \u001b[0mmask\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0misnull\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 556\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 557\u001b[0m \u001b[0mvalues\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mvalues\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32mC:\\Users\\David\\Anaconda\\lib\\site-packages\\pandas\\core\\common.pyc\u001b[0m in \u001b[0;36misnull\u001b[1;34m(obj)\u001b[0m\n\u001b[0;32m 127\u001b[0m \u001b[0mpandas\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mnotnull\u001b[0m\u001b[1;33m:\u001b[0m \u001b[0mboolean\u001b[0m \u001b[0minverse\u001b[0m \u001b[0mof\u001b[0m \u001b[0mpandas\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0misnull\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 128\u001b[0m \"\"\"\n\u001b[1;32m--> 129\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0m_isnull\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 130\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 131\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32mC:\\Users\\David\\Anaconda\\lib\\site-packages\\pandas\\core\\common.pyc\u001b[0m in \u001b[0;36m_isnull_new\u001b[1;34m(obj)\u001b[0m\n\u001b[0;32m 137\u001b[0m \u001b[1;32mraise\u001b[0m \u001b[0mNotImplementedError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"isnull is not defined for MultiIndex\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 138\u001b[0m \u001b[1;32melif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mABCSeries\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mndarray\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 139\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0m_isnull_ndarraylike\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 140\u001b[0m \u001b[1;32melif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mABCGeneric\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 141\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mobj\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_constructor\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_data\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0misnull\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfunc\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0misnull\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32mC:\\Users\\David\\Anaconda\\lib\\site-packages\\pandas\\core\\common.pyc\u001b[0m in \u001b[0;36m_isnull_ndarraylike\u001b[1;34m(obj)\u001b[0m\n\u001b[0;32m 225\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mABCSeries\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 226\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[0mpandas\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mSeries\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 227\u001b[1;33m \u001b[0mresult\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mSeries\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mresult\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mindex\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mobj\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mindex\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mname\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mobj\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mname\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcopy\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mFalse\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 228\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 229\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mresult\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32mC:\\Users\\David\\Anaconda\\lib\\site-packages\\pandas\\core\\series.pyc\u001b[0m in \u001b[0;36m__init__\u001b[1;34m(self, data, index, dtype, name, copy, fastpath)\u001b[0m\n\u001b[0;32m 229\u001b[0m raise_cast_failure=True)\n\u001b[0;32m 230\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 231\u001b[1;33m \u001b[0mdata\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mSingleBlockManager\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mindex\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfastpath\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mTrue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 232\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 233\u001b[0m \u001b[0mgeneric\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mNDFrame\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m__init__\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdata\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfastpath\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mTrue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32mC:\\Users\\David\\Anaconda\\lib\\site-packages\\pandas\\core\\internals.pyc\u001b[0m in \u001b[0;36m__init__\u001b[1;34m(self, block, axis, do_integrity_check, fastpath)\u001b[0m\n\u001b[0;32m 2999\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mfastpath\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3000\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0maxes\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[0maxis\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 3001\u001b[1;33m \u001b[1;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mblock\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlist\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 3002\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3003\u001b[0m \u001b[1;31m# empty block\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;31mKeyboardInterrupt\u001b[0m: " ] } ], "prompt_number": 5 }, { "cell_type": "code", "collapsed": false, "input": [ "df_oneyear.to_pickle(save_path+'/df_oneyear.pickle')" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 5 }, { "cell_type": "code", "collapsed": false, "input": [ "df_oneyear = pd.read_pickle(save_path+'/df_oneyear.pickle')" ], "language": "python", "metadata": {}, "outputs": [ { "ename": "IOError", "evalue": "[Errno 2] No such file or directory: 'user_singletons/df_oneyear.pickle'", "output_type": "pyerr", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[1;31mIOError\u001b[0m Traceback (most recent call last)", "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mdf_oneyear\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mpd\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mread_pickle\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msave_path\u001b[0m\u001b[1;33m+\u001b[0m\u001b[1;34m'/df_oneyear.pickle'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[1;32mC:\\Users\\David\\Anaconda\\lib\\site-packages\\pandas\\io\\pickle.pyc\u001b[0m in \u001b[0;36mread_pickle\u001b[1;34m(path)\u001b[0m\n\u001b[0;32m 59\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 60\u001b[0m \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 61\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mtry_read\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mpath\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 62\u001b[0m \u001b[1;32mexcept\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 63\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mPY3\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32mC:\\Users\\David\\Anaconda\\lib\\site-packages\\pandas\\io\\pickle.pyc\u001b[0m in \u001b[0;36mtry_read\u001b[1;34m(path, encoding)\u001b[0m\n\u001b[0;32m 55\u001b[0m \u001b[1;31m# compat pickle\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 56\u001b[0m \u001b[1;32mexcept\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 57\u001b[1;33m \u001b[1;32mwith\u001b[0m \u001b[0mopen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mpath\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'rb'\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mfh\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 58\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mpc\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mload\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfh\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mencoding\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mencoding\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcompat\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mTrue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 59\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;31mIOError\u001b[0m: [Errno 2] No such file or directory: 'user_singletons/df_oneyear.pickle'" ] } ], "prompt_number": 3 }, { "cell_type": "code", "collapsed": false, "input": [ "df_oneyear.sort('births', inplace=True, ascending=False)\n", "df_oneyear.head(50)" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
namesexyearpctbirths
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 6, "text": [ "Empty DataFrame\n", "Columns: [name, sex, year, pct, births]\n", "Index: []" ] } ], "prompt_number": 6 }, { "cell_type": "code", "collapsed": false, "input": [ "%matplotlib inline\n", "dictionary = {0:1000, 1:20, 2:15, 3:0, 4:5}\n", "xmax = df_oneyear.year.max()\n", "plt.figure() # <- makes a new figure and sets it active (add this)\n", "plt.hist(list(df_oneyear.year),xmax) # <- finds the current active axes/figure and plots to it\n", "plt.title('Histogram of names appearing only once in the Social Security database') \n", "plt.xlabel('Year')\n", "plt.ylabel('Number of names')\n", "plt.show()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nRERERERERERERERERERERERERERERERERERERKT5/X++G7lkut6boQAAAABJRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 5 }, { "cell_type": "code", "collapsed": false, "input": [ "#determine what percentage of births were single-appearances for each year\n", "df_oygrt = pd.DataFrame(df_oneyear.groupby('year').births.sum())\n", "df_oygrm = pd.DataFrame(df_oneyear[df_oneyear.sex == 'M'].groupby('year').births.sum())\n", "df_oygrf = pd.DataFrame(df_oneyear[df_oneyear.sex == 'F'].groupby('year').births.sum())\n", "df_oygrt['pct'] = 0.0\n", "df_oygrm['pct'] = 0.0\n", "df_oygrf['pct'] = 0.0\n", "for i in range(len(df_oygrt)):\n", " df_oygrt.pct.iloc[i] = df_oygrt.births.iloc[i] * 1.0 / " ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 18 }, { "cell_type": "code", "collapsed": false, "input": [ "df_oygr.head()" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
births
year
1880 5
1881 14
1885 15
1886 5
1887 5
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 19, "text": [ " births\n", "year \n", "1880 5\n", "1881 14\n", "1885 15\n", "1886 5\n", "1887 5" ] } ], "prompt_number": 19 } ], "metadata": {} } ] }