import pandas as pd
import numpy as np
import sys
print "\npandas version:",pd.__version__
pandas version: 0.10.0
def gen_l3_mi(nchs,ndets,ntimes):
"generate a 3-level multi-index dataframe"
c = ['c'+str(i) for i in range(1,nchs+1)]
det = ['d'+str(i) for i in range(1,ndets+1)]
times = ['t'+str(i) for i in range(1,ntimes+1)]
ind = []
for ch in c:
for d in det:
for t in times:
ind.append((ch,d,t))
index = pd.MultiIndex.from_tuples(ind)
return pd.DataFrame(np.random.randn(nchs*ndets*ntimes,3),
columns=['A','B','C'],index=index)
df = gen_l3_mi(1,2,5)
df
A | B | C | |||
---|---|---|---|---|---|
c1 | d1 | t1 | -0.268105 | 1.063887 | -1.959510 |
t2 | -0.887410 | 0.614846 | -0.448357 | ||
t3 | 0.587298 | -0.037883 | -0.252485 | ||
t4 | -0.415601 | 1.203818 | -0.362764 | ||
t5 | -0.596451 | -0.179422 | -0.256425 | ||
d2 | t1 | -0.712503 | -0.635871 | -1.642539 | |
t2 | -1.102127 | 1.446910 | 1.628707 | ||
t3 | 0.700126 | -0.211521 | 0.306729 | ||
t4 | 0.236699 | -1.327817 | -0.226565 | ||
t5 | -0.644808 | -0.262662 | 0.197099 |
df['D']=0.0
df.D.ix['c1','d1'].ix['t3':'t5'] = 1
df
A | B | C | D | |||
---|---|---|---|---|---|---|
c1 | d1 | t1 | -0.268105 | 1.063887 | -1.959510 | 0 |
t2 | -0.887410 | 0.614846 | -0.448357 | 0 | ||
t3 | 0.587298 | -0.037883 | -0.252485 | 1 | ||
t4 | -0.415601 | 1.203818 | -0.362764 | 1 | ||
t5 | -0.596451 | -0.179422 | -0.256425 | 1 | ||
d2 | t1 | -0.712503 | -0.635871 | -1.642539 | 0 | |
t2 | -1.102127 | 1.446910 | 1.628707 | 0 | ||
t3 | 0.700126 | -0.211521 | 0.306729 | 0 | ||
t4 | 0.236699 | -1.327817 | -0.226565 | 0 | ||
t5 | -0.644808 | -0.262662 | 0.197099 | 0 |
grouped = df.groupby('D')
for i,j in grouped:
print 'D:',i
print 'Actual index[2]:',j.index[0][2]
print 'First element of levels[2]:',j.index.levels[2][0]
D: 0.0 Actual index[2]: t1 First element of levels[2]: t1 D: 1.0 Actual index[2]: t3 First element of levels[2]: t1