Cha*_*lon 6 python multi-index pandas
我有一个MultiIndexed DataFrame df1,并希望以这样的方式循环它,在循环的每个实例中都有一个带有常规非分层索引的DataFrame,它是与外部索引条目对应的df1的子集.即,如果我有:

我想得到

以及随后的C1,C2等我也不知道这些名称究竟是什么(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
Run Code Online (Sandbox Code Playgroud)
不需要循环.
您也可以选择这些以返回一个帧(与原始MI),例如 df.loc[['A1']]
如果要获取索引中的值:
In [38]: df.index.get_level_values(0).unique()
Out[38]: array(['A0', 'A1', 'A2', 'A3'], dtype=object)
Run Code Online (Sandbox Code Playgroud)
你想做这样的事情吗?
for i in set(df.index):
print df.loc[i].reset_index()
Run Code Online (Sandbox Code Playgroud)
set(df.index)返回多索引(分层索引)的一组唯一元组。df.loc[i].reset_index()...df.loc[i]当然返回原始数据帧的子集,该.reset_index()部分会将索引转换为列| 归档时间: |
|
| 查看次数: |
6214 次 |
| 最近记录: |