Select only one index of multiindex DataFrame
我正在尝试使用多索引数据帧中的一个索引创建新的数据帧。
1 2 3 4 5 6 7 8 9 10 | A B C first second bar one 0.895717 0.410835 -1.413681 two 0.805244 0.813850 1.607920 baz one -1.206412 0.132003 1.024180 two 2.565646 -0.827317 0.569605 foo one 1.431256 -0.076467 0.875906 two 1.340309 -1.187678 -2.211372 qux one -1.170299 1.130127 0.974466 two -0.226169 -1.436737 -2.006747 |
理想情况下,我想要这样的东西:
1 | In: df.ix[level="first"] |
号
还有:
1 2 3 4 5 6 7 8 9 10 11 12 13 | Out: A B C first bar 0.895717 0.410835 -1.413681 0.805244 0.813850 1.607920 baz -1.206412 0.132003 1.024180 2.565646 -0.827317 0.569605 foo 1.431256 -0.076467 0.875906 1.340309 -1.187678 -2.211372 qux -1.170299 1.130127 0.974466 -0.226169 -1.436737 -2.006747 ` |
本质上,我想删除除级别
一种方法是简单地将cx1[0]重新绑定到多索引的所需级别。可以通过指定要保留的标签名称来执行此操作:
1 | df.index = df.index.get_level_values('first') |
或者使用级别的整数值:
1 | df.index = df.index.get_level_values(0) |
号
所有其他级别的多重指数都将在这里消失。
该解决方案是全新的,使用
1 2 3 4 5 6 7 8 9 10 | In [88]: df.xs('bar', level='first') Out[88]: Second Third one A -2.315312 B 0.497769 C 0.108523 two A -0.778303 B -1.555389 C -2.625022 dtype: float64 |
也可以使用多个索引作为
1 2 3 4 5 6 | In [89]: df.xs(('bar', 'A'), level=('First', 'Third')) Out[89]: Second one -2.315312 two -0.778303 dtype: float64 |
。
示例的设置如下
1 2 3 4 5 6 7 8 9 10 | import pandas as pd import numpy as np arrays = [ np.array(['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux']), np.array(['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']) ] index = pd.MultiIndex.from_tuples(list(zip(*arrays)), names=['first', 'second']) df = pd.DataFrame(np.random.randn(3, 8), index=['A', 'B', 'C'], columns=index) df.index.names = pd.core.indexes.frozen.FrozenList(['First', 'Second', 'Third']) df = df.unstack() |