Skip to content

Instantly share code, notes, and snippets.

Created January 8, 2013 08:06
Show Gist options
  • Save anonymous/4482106 to your computer and use it in GitHub Desktop.
Save anonymous/4482106 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"name": "index.levels problem"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "code",
"collapsed": false,
"input": [
"import pandas as pd\n",
"import numpy as np\n",
"import sys\n",
"\n",
"print \"\\npandas version:\",pd.__version__"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"pandas version: 0.10.0\n"
]
}
],
"prompt_number": 1
},
{
"cell_type": "raw",
"metadata": {},
"source": [
"define function to generate 3 level multi-index based dataframes"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def gen_l3_mi(nchs,ndets,ntimes):\n",
" \"generate a 3-level multi-index dataframe\"\n",
" c = ['c'+str(i) for i in range(1,nchs+1)]\n",
" det = ['d'+str(i) for i in range(1,ndets+1)]\n",
" times = ['t'+str(i) for i in range(1,ntimes+1)]\n",
" ind = []\n",
" for ch in c:\n",
" for d in det:\n",
" for t in times:\n",
" ind.append((ch,d,t))\n",
" index = pd.MultiIndex.from_tuples(ind)\n",
" return pd.DataFrame(np.random.randn(nchs*ndets*ntimes,3), \n",
" columns=['A','B','C'],index=index)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 2
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"df = gen_l3_mi(1,2,5)\n",
"df"
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th>A</th>\n",
" <th>B</th>\n",
" <th>C</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <td rowspan=\"10\" valign=\"top\"><strong>c1</strong></td>\n",
" <td rowspan=\"5\" valign=\"top\"><strong>d1</strong></td>\n",
" <td><strong>t1</strong></td>\n",
" <td>-0.268105</td>\n",
" <td> 1.063887</td>\n",
" <td>-1.959510</td>\n",
" </tr>\n",
" <tr>\n",
" <td><strong>t2</strong></td>\n",
" <td>-0.887410</td>\n",
" <td> 0.614846</td>\n",
" <td>-0.448357</td>\n",
" </tr>\n",
" <tr>\n",
" <td><strong>t3</strong></td>\n",
" <td> 0.587298</td>\n",
" <td>-0.037883</td>\n",
" <td>-0.252485</td>\n",
" </tr>\n",
" <tr>\n",
" <td><strong>t4</strong></td>\n",
" <td>-0.415601</td>\n",
" <td> 1.203818</td>\n",
" <td>-0.362764</td>\n",
" </tr>\n",
" <tr>\n",
" <td><strong>t5</strong></td>\n",
" <td>-0.596451</td>\n",
" <td>-0.179422</td>\n",
" <td>-0.256425</td>\n",
" </tr>\n",
" <tr>\n",
" <td rowspan=\"5\" valign=\"top\"><strong>d2</strong></td>\n",
" <td><strong>t1</strong></td>\n",
" <td>-0.712503</td>\n",
" <td>-0.635871</td>\n",
" <td>-1.642539</td>\n",
" </tr>\n",
" <tr>\n",
" <td><strong>t2</strong></td>\n",
" <td>-1.102127</td>\n",
" <td> 1.446910</td>\n",
" <td> 1.628707</td>\n",
" </tr>\n",
" <tr>\n",
" <td><strong>t3</strong></td>\n",
" <td> 0.700126</td>\n",
" <td>-0.211521</td>\n",
" <td> 0.306729</td>\n",
" </tr>\n",
" <tr>\n",
" <td><strong>t4</strong></td>\n",
" <td> 0.236699</td>\n",
" <td>-1.327817</td>\n",
" <td>-0.226565</td>\n",
" </tr>\n",
" <tr>\n",
" <td><strong>t5</strong></td>\n",
" <td>-0.644808</td>\n",
" <td>-0.262662</td>\n",
" <td> 0.197099</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"output_type": "pyout",
"prompt_number": 3,
"text": [
" A B C\n",
"c1 d1 t1 -0.268105 1.063887 -1.959510\n",
" t2 -0.887410 0.614846 -0.448357\n",
" t3 0.587298 -0.037883 -0.252485\n",
" t4 -0.415601 1.203818 -0.362764\n",
" t5 -0.596451 -0.179422 -0.256425\n",
" d2 t1 -0.712503 -0.635871 -1.642539\n",
" t2 -1.102127 1.446910 1.628707\n",
" t3 0.700126 -0.211521 0.306729\n",
" t4 0.236699 -1.327817 -0.226565\n",
" t5 -0.644808 -0.262662 0.197099"
]
}
],
"prompt_number": 3
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"df['D']=0.0"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 4
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"df.D.ix['c1','d1'].ix['t3':'t5'] = 1\n",
"df"
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th>A</th>\n",
" <th>B</th>\n",
" <th>C</th>\n",
" <th>D</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <td rowspan=\"10\" valign=\"top\"><strong>c1</strong></td>\n",
" <td rowspan=\"5\" valign=\"top\"><strong>d1</strong></td>\n",
" <td><strong>t1</strong></td>\n",
" <td>-0.268105</td>\n",
" <td> 1.063887</td>\n",
" <td>-1.959510</td>\n",
" <td> 0</td>\n",
" </tr>\n",
" <tr>\n",
" <td><strong>t2</strong></td>\n",
" <td>-0.887410</td>\n",
" <td> 0.614846</td>\n",
" <td>-0.448357</td>\n",
" <td> 0</td>\n",
" </tr>\n",
" <tr>\n",
" <td><strong>t3</strong></td>\n",
" <td> 0.587298</td>\n",
" <td>-0.037883</td>\n",
" <td>-0.252485</td>\n",
" <td> 1</td>\n",
" </tr>\n",
" <tr>\n",
" <td><strong>t4</strong></td>\n",
" <td>-0.415601</td>\n",
" <td> 1.203818</td>\n",
" <td>-0.362764</td>\n",
" <td> 1</td>\n",
" </tr>\n",
" <tr>\n",
" <td><strong>t5</strong></td>\n",
" <td>-0.596451</td>\n",
" <td>-0.179422</td>\n",
" <td>-0.256425</td>\n",
" <td> 1</td>\n",
" </tr>\n",
" <tr>\n",
" <td rowspan=\"5\" valign=\"top\"><strong>d2</strong></td>\n",
" <td><strong>t1</strong></td>\n",
" <td>-0.712503</td>\n",
" <td>-0.635871</td>\n",
" <td>-1.642539</td>\n",
" <td> 0</td>\n",
" </tr>\n",
" <tr>\n",
" <td><strong>t2</strong></td>\n",
" <td>-1.102127</td>\n",
" <td> 1.446910</td>\n",
" <td> 1.628707</td>\n",
" <td> 0</td>\n",
" </tr>\n",
" <tr>\n",
" <td><strong>t3</strong></td>\n",
" <td> 0.700126</td>\n",
" <td>-0.211521</td>\n",
" <td> 0.306729</td>\n",
" <td> 0</td>\n",
" </tr>\n",
" <tr>\n",
" <td><strong>t4</strong></td>\n",
" <td> 0.236699</td>\n",
" <td>-1.327817</td>\n",
" <td>-0.226565</td>\n",
" <td> 0</td>\n",
" </tr>\n",
" <tr>\n",
" <td><strong>t5</strong></td>\n",
" <td>-0.644808</td>\n",
" <td>-0.262662</td>\n",
" <td> 0.197099</td>\n",
" <td> 0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"output_type": "pyout",
"prompt_number": 5,
"text": [
" A B C D\n",
"c1 d1 t1 -0.268105 1.063887 -1.959510 0\n",
" t2 -0.887410 0.614846 -0.448357 0\n",
" t3 0.587298 -0.037883 -0.252485 1\n",
" t4 -0.415601 1.203818 -0.362764 1\n",
" t5 -0.596451 -0.179422 -0.256425 1\n",
" d2 t1 -0.712503 -0.635871 -1.642539 0\n",
" t2 -1.102127 1.446910 1.628707 0\n",
" t3 0.700126 -0.211521 0.306729 0\n",
" t4 0.236699 -1.327817 -0.226565 0\n",
" t5 -0.644808 -0.262662 0.197099 0"
]
}
],
"prompt_number": 5
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"grouped = df.groupby('D')"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 6
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"for i,j in grouped:\n",
" print 'D:',i\n",
" print 'Actual index[2]:',j.index[0][2]\n",
" print 'First element of levels[2]:',j.index.levels[2][0]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"D: 0.0\n",
"Actual index[2]: t1\n",
"First element of levels[2]: t1\n",
"D: 1.0\n",
"Actual index[2]: t3\n",
"First element of levels[2]: t1\n"
]
}
],
"prompt_number": 7
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 7
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment