Axis argument for .loc () to interpret past slicers along axis = 1

The documentation offers:

You can also specify an axis argument for .loc to interpret the passed slicers on the same axis.

However, I am getting an error trying to crop the column index.

import pandas as pd
import numpy as np

cols= [(yr,m) for yr in [2014,2015] for m in [7,8,9,10]]
df = pd.DataFrame(np.random.randint(1,100,(10,8)),index=tuple('ABCDEFGHIJ'))
df.columns =pd.MultiIndex.from_tuples(cols)

print df.head()

  2014             2015            
    7   8   9   10   7   8   9   10
A   68  51   6  48   24   3   4  85
B   79  75  68  62   19  40  63  45
C   60  15  32  32   37  95  56  38
D    4  54  81  50   13  64  65  13
E   78  21  84   1   83  18  39  57


#This does not work as expected
print df.loc(axis=1)[(2014,9):(2015,8)]
AssertionError: Start slice bound is non-scalar
#but an arbitrary transpose and changing axis works!
df = df.T
print df.loc(axis=0)[(2014,9):(2015,8)]

          A   B   C   D   E   F   G   H   I   J
2014 9    6  68  32  81  84  60  83  39  94  93
     10  48  62  32  50   1  84  18  14  92  33
2015 7   24  19  37  13  83  69  31  91  69  90
     8    3  40  95  64  18   8  32  93  16  25

Therefore, I could always assign a slice and rearrange the transpose. Although it looks like a hack, and setting the axis = 1 should have worked.

df = df.loc(axis=0)[(2014,9):(2015,8)]

df = df.T


print df

  2014     2015    
    9   10   7   8 
A   64  98   99  87
B   43  36   22  84
C   32  78   86  66
D   67   8   34  73
E   83  54   96  33
F   18  83   36  71
G   13  25   76   8
H   69   4   99  84
I    3  52   50  62
J   67  60    9  49
+4
source share
1 answer

It could be a mistake. Pls post a github question. The canonical way of choosing things is to fully indicate all the axes.

In [6]: df.loc[:,(2014,9):(2015,8)]
Out[6]: 
  2014     2015    
    9   10   7   8 
A   26   2   44  69
B   41   7    5   1
C    8  27   23  22
D   54  72   81  93
E   18  23   54   7
F   11  81   37  83
G   60  38   59  29
H    3  95   89  96
I    6   9   77   9
J   90  92   10  32
+2
source

Source: https://habr.com/ru/post/1598109/


All Articles