遍历熊猫中的MultiIndex

查尔斯·狄龙

我有一个MultiIndexed DataFrame df1,并希望以一种循环的方式遍历它,以便在循环的每个实例中都有一个带有规则非分层索引的DataFrame,该索引是df1的子集,对应于外部索引条目。即,如果我有:

第一表

我想得到

第二表

我还不知道它们的名称实际上是什么(C1等,这里只是占位符),所以只想遍历我拥有的C i的数量

我一直徘徊在iterrows各种循环中,没有得到任何明显的结果,也不知道该如何进行。我觉得应该有一个简单的解决方案,但找不到文件中看起来有用的任何东西,可能是由于我自己缺乏理解。

杰夫

使用此处的修改示例

In [30]: def mklbl(prefix,n):
        return ["%s%s" % (prefix,i)  for i in range(n)]
   ....: 

In [31]: columns = MultiIndex.from_tuples([('a','foo'),('a','bar'),
                                  ('b','foo'),('b','bah')],
                                   names=['lvl0', 'lvl1'])

In [33]: index = MultiIndex.from_product([mklbl('A',4),mklbl('B',2)])

In [34]: df = DataFrame(np.arange(len(index)*len(columns)).reshape((len(index),len(columns))),
               index=index,
               columns=columns).sortlevel().sortlevel(axis=1)

In [35]: df
Out[35]: 
lvl0     a         b     
lvl1   bar  foo  bah  foo
A0 B0    1    0    3    2
   B1    5    4    7    6
A1 B0    9    8   11   10
   B1   13   12   15   14
A2 B0   17   16   19   18
   B1   21   20   23   22
A3 B0   25   24   27   26
   B1   29   28   31   30

In [36]: df.loc['A0']
Out[36]: 
lvl0    a         b     
lvl1  bar  foo  bah  foo
B0      1    0    3    2
B1      5    4    7    6

In [37]: df.loc['A1']
Out[37]: 
lvl0    a         b     
lvl1  bar  foo  bah  foo
B0      9    8   11   10
B1     13   12   15   14

无需循环。

您也可以选择这些以返回帧(带有原始MI),例如 df.loc[['A1']]

如果要获取索引中的值:

In [38]: df.index.get_level_values(0).unique()
Out[38]: array(['A0', 'A1', 'A2', 'A3'], dtype=object)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章