使用列表对数据帧进行多索引切片

时间:2014-09-13 14:16:16

标签: python pandas

我有一个多索引数据框:

          score
id  iso
0   AR    1.0203
    BO    1.2303
    CN    1.2402
    NL    1.1202
    SC    1.4552
1   AR    1.2004
    BO    2.3030
    CN    1.2039
    NL    1.6043
    SC    1.3949

从这个数据框架中,我想获得“id'”的所有分数。 = 0表示iso代码列表,例如: ['AR','CN','SC']

传递元组列表,我设法获得这些分数,例如:

df.ix[[(0,'AR'),(0,'CN'),(0,'SC')],:]

结果:

          score
id  iso
0   AR    1.0203
    CN    1.2402
    SC    1.4552

现在我构建了元组列表,然后用ix传递它。阅读http://pandas.pydata.org/pandas-docs/stable/indexing.html#multiindexing-using-slicers,我觉得有一种比传递元组列表更有效的方法,但我无法理解如何处理它。在这种情况下,如何构建多索引切片器?

1 个答案:

答案 0 :(得分:3)

您可以使用multiindexing using slicers

>>> idx = pd.IndexSlice
>>> df.loc[idx[0, ['AR','CN','SC']],:]
        score
id iso       
0  AR   1.020
   CN   1.240
   SC   1.455

甚至更简单:

>>> df.loc[(0, ['AR','CN','SC']),:]

或者,或者:

>>> i = df.index.get_level_values(1).isin(['AR','CN','SC'])
>>> j = df.index.get_level_values(0) == 0
>>> df.loc[i & j]