在pandas中使用.loc和MultiIndex?

时间:2014-06-26 16:31:32

标签: python pandas dataframe multi-index

有谁知道是否可以使用DataFrame.loc方法从MultiIndex中进行选择?我有以下DataFrame,并且希望能够访问位于“居住”列中的值,位于('at', 1)('at', 3)('at', 5)的索引,依此类推(非) -sequential)。

我希望能够执行data.loc[['at',[1,3,5]], 'Dwell']之类的操作,类似于常规索引的data.loc[[1,3,5], 'Dwell']语法(返回3个成员的Dwell值系列)。

我的目的是选择数据的任意子集,仅对该子集执行某些分析,然后使用分析结果更新新值。我计划使用相同的语法为这些数据设置新值,因此链接选择器在这种情况下不会真正起作用。

以下是我正在使用的DataFrame片段:

         Char    Dwell  Flight  ND_Offset  Offset
QGram                                                           
at    0     a      100     120   0.000000       0  
      1     t      180       0   0.108363       5  
      2     a      100     120   0.000000       0 
      3     t      180       0   0.108363       5 
      4     a       20     180   0.000000       0  
      5     t       80     120   0.108363       5
      6     a       20     180   0.000000       0   
      7     t       80     120   0.108363       5  
      8     a       20     180   0.000000       0  
      9     t       80     120   0.108363       5   
      10    a      120     180   0.000000       0  

谢谢!

2 个答案:

答案 0 :(得分:30)

如果您使用的是版本0.14,则只需将元组传递给.loc,如下所示:

df.loc[('at', [1,3,4]), 'Dwell']

答案 1 :(得分:9)

尝试cross-section索引:

In [68]: df.xs('at', level='QGram', drop_level=False).loc[[1,4]]
Out[68]: 
        Char  Dwell  Flight  ND_Offset  Offset
QGram                                         
at    1    t    180       0   0.108363       5
      4    a     20     180   0.000000       0