Reputation: 165
My question is as in the title, so for example I would like to write dataframe.index.Magic_command[None,'valueA','row','p1']
and get value 'car', or
dataframe.index.Magic_command[None,'valueC','row','p1','1']
and receive as output value bike
Here is the example code:
import numpy as np
import pandas as pd
# multiindex array
arr = [np.array(['car', 'car', 'car','car', 'car', 'car', 'car', 'car', 'car', 'truck', 'truck', 'truck', 'truck', 'truck', 'truck','truck', 'truck', 'truck','bike','bike', 'bike','bike','bike', 'bike','bike','bike', 'bike']),
np.array(['valueA', 'valueA','valueA', 'valueA','valueA', 'valueA','valueA', 'valueA','valueA','valueB','valueB','valueB','valueB','valueB','valueB','valueB','valueB','valueB', 'valueC','valueC','valueC','valueC','valueC','valueC','valueC','valueC','valueC']),
np.array(['row','row','row','row','row','row','row','row','row','row','row','row','row','row','row','row','row','row','row','row','row','row','row','row','row','row','row']),
np.array(['p1','p1','p1','p2','p2','p2','p3','p3','p3','p1','p1','p1','p2','p2','p2','p3','p3','p3','p1','p1','p1','p2','p2','p2','p3','p3','p3',]),
np.array(['1','2','3','1','2','3','1','2','3','1','2','3','1','2','3','1','2','3','1','2','3','1','2','3','1','2','3',])]
# forming multiindex dataframe
dataFrame = pd.DataFrame(
np.random.randn(27, 3), index=arr,columns=['Col 1', 'Col 2', 'Col 3'])
dataFrame.index.names = ['level 0', 'level 1','level 2','level 3','level 4']
print(dataFrame)
From above I get this dataframe:
Col 1 Col 2 Col 3
level 0 level 1 level 2 level 3 level 4
car valueA row p1 1 0.088282 0.645195 -0.102823
2 -0.659527 -1.820909 -1.774308
3 0.859338 0.971282 0.517606
p2 1 1.205428 -0.277596 0.527442
2 0.366879 0.149401 -0.087129
3 -0.084490 -1.802438 2.000927
p3 1 -1.651197 0.340212 -2.170045
2 0.625551 -0.327191 -1.376346
3 -0.112555 -0.727614 -0.949196
truck valueB row p1 1 0.735279 0.324148 -0.588617
2 -1.398363 0.056191 -0.051693
3 -1.948123 0.316405 1.127997
p2 1 -0.899230 0.552561 -0.014481
2 -1.159626 -1.008341 0.569346
3 -0.862040 -1.654220 -0.187640
p3 1 1.177478 0.563265 -0.799456
2 0.631338 0.660141 0.801916
3 -0.361715 -0.070938 -0.113358
bike valueC row p1 1 -1.246785 0.344593 -1.363045
2 1.199800 -0.483610 0.385470
3 -0.820398 1.550655 2.625559
p2 1 0.772196 0.956007 -0.921774
2 1.102925 0.152290 -0.553291
3 0.538580 1.305551 -0.924003
p3 1 -0.025790 -0.134343 0.197256
2 -0.851465 -0.324827 0.057217
3 -0.994596 0.361060 0.797949
Upvotes: 0
Views: 139
Reputation: 862511
Use DataFrame.loc
with IndexSlice
:
a = dataFrame.loc[pd.IndexSlice[:,'valueC','row','p1','1']].index[0]
print (a)
bike
Upvotes: 1