拼接MultiIndex(.loc不工作)

时间:2016-06-29 15:49:25

标签: python pandas slice multi-index

我在切片MultiIndex时遇到了麻烦。我现在已经尝试了几个tecniques,但是除了一个我不能让他们工作的人。 我的DataFrame由以下几行组成:



    means[0:2]




我要做的是用基因型拼接我的df。 最简单的方法当然是按索引切片,例如

    means.loc[('cre')]

但由于我有多个数据框和更多数据,我正在寻找更优雅的方式。

{{1}}
已经为相同的数据帧工作的

(尽管行数较少)并不适合这个,因为它一直给我Keyerror:' cre'

当我尝试使用索引器和其他方法时,我偶然发现我不断收到“#cre;'不在索引中。但是当我试图通过名字而不是水平时,也发生了同样的事情。我无法弄清楚为什么会这样。

如果有人可以帮助我,那就太好了!谢谢!

1 个答案:

答案 0 :(得分:0)

解决方案1:pd.IndexSlice

df.loc[pd.IndexSlice[:, 'cre', :], :]

                              Total         DL         DM
Mouse Genotype Intensity                                 
455   cre      s          15.114886  13.626841  16.602930
               w          41.419970  33.916706  48.923234

解决方案2:swaplevelloc

要使用loc['cre']'cre'需要位于多索引的第一级。交换级别解决了这个问题。

df.swaplevel(0, 1).loc['cre']

                     Total         DL         DM
Mouse Intensity                                 
455   s          15.114886  13.626841  16.602930
      w          41.419970  33.916706  48.923234

解决方案3:xs

print df.xs('cre', level=1)

                     Total         DL         DM
Mouse Intensity                                 
455   s          15.114886  13.626841  16.602930
      w          41.419970  33.916706  48.923234

print df.xs('cre', level=1, drop_level=False)

                              Total         DL         DM
Mouse Genotype Intensity                                 
455   cre      s          15.114886  13.626841  16.602930
               w          41.419970  33.916706  48.923234

时序

enter image description here

xs似乎是最高效的。