我有一个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] 删除。
我来说两句