In Pandas, what is a good way to select sets of arbitrary rows in a multiindex?
df = pd.DataFrame(columns=[\'A\', \'B\', \'C\'])
df[\'A\'] = [\'a\', \'a\', \
In newer versions of pandas you can simply use .iloc for row indexing.
df = pd.DataFrame(columns=['A', 'B', 'C'])
df['A'] = ['a', 'a', 'b', 'b']
df['B'] = [1,2,3,4]
df['C'] = [1,2,3,4]
df.iloc[[0, 3]][['A', 'B']]
You indeed cannot index with a DataFrame directly, but if you convert it to an Index object, it does the correct thing (a row in the DataFrame will be regarded as one multi-index entry):
In [43]: pd.Index(the_indices_we_want)
Out[43]: Index([(u'a', 1), (u'b', 4)], dtype='object')
In [44]: df.ix[pd.Index(the_indices_we_want)]
Out[44]:
C
A B
a 1 1
b 4 4
In [45]: df.ix[[tuple(x) for x in the_indices_we_want.values]]
Out[45]:
C
A B
a 1 1
b 4 4
This is a somewhat cleaner. And with some quick tests it seems to be a bit faster (but not much, only 2 times)