循环遍历 pandas 中的 MultiIndex
回答问题 我有一个 MultiIndexed DataFrame df1,并希望以这样的方式循环它,以便在循环的每个实例中都有一个带有常规非分层索引的 DataFrame,它是对应于外部索引条目的 df1 的子集。即,如果我有: 我想得到 然后是 C1、C2 等。我也不知道这些名称实际上是什么(C1 等,只是这里的占位符),所以只想循环我拥有的 Ci 值的数量。 我一直在使用iterrows和各种
·
回答问题
我有一个 MultiIndexed DataFrame df1,并希望以这样的方式循环它,以便在循环的每个实例中都有一个带有常规非分层索引的 DataFrame,它是对应于外部索引条目的 df1 的子集。即,如果我有:
我想得到
然后是 C1、C2 等。我也不知道这些名称实际上是什么(C1 等,只是这里的占位符),所以只想循环我拥有的 Ci 值的数量。
我一直在使用iterrows
和各种循环,没有得到任何切实的结果,也不知道如何进行。我觉得应该存在一个简单的解决方案,但在文档中找不到任何看起来有用的东西,可能是由于我自己缺乏理解。
Answers
在这里使用来自的修改示例
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)
更多推荐
已为社区贡献126473条内容
所有评论(0)