我正在为MultiIndex
寻找DataFrame
的at
的等价物。
我目前的实现使用:
mi = df.columns # This is a multi-index
mi.get_level_values(level_name)[i]
恐怕这对表演不好。是否有其他值可以读取索引i
处的特定level
?
示例:
mi = pd.MultiIndex.from_product([[1,2,3], [4,5,6]], names=['i', 'j'])
df = pd.DataFrame({'x': range(9)}, index=mi)
df
x
i j
1 4 0
5 1
6 2
2 4 3
5 4
6 5
3 4 6
5 7
6 8
df.index.get_level_values('j')[3]
4
有没有df.index.get_level_values('j')[3]
的短期替代方案
如果我理解正确,我想您可以对DataFrame进行子集设置。类似于:
df.loc['level'] # In case there is more than one level: df.loc[('level1': 'level2')]
这将为您提供一行(或多行(,从那里您可以再次垂直子集。同时在两个方向上进行子集设置看起来像:
df.loc['your_desired_column', 'level1': 'level2']
如果有多个索引,则基于外部索引和内部索引的子集的sintax不同。
Outser:使用字符串内部:使用元组
如:
df.loc['level1':'level2'] # Outer
df.loc[('outer1', 'inner1'):('outer2', 'inner2')] # Outer & Inner
我希望你觉得这很有帮助!
使用Panda的MultiIndex文档检查轴上的基本索引。
以下是一些例子:
In [18]: df = pd.DataFrame(np.random.randn(3, 8), index=['A', 'B', 'C'], columns=index)
In [19]: df
Out[19]:
first bar baz foo qux
second one two one two one two one two
A 0.895717 0.805244 -1.206412 2.565646 1.431256 1.340309 -1.170299 -0.226169
B 0.410835 0.813850 0.132003 -0.827317 -0.076467 -1.187678 1.130127 -1.436737
C -1.413681 1.607920 1.024180 0.569605 0.875906 -2.211372 0.974466 -2.006747
In [25]: df['bar']
Out[25]:
second one two
A 0.895717 0.805244
B 0.410835 0.813850
C -1.413681 1.607920
In [26]: df['bar', 'one']
Out[26]:
A 0.895717
B 0.410835
C -1.413681
Name: (bar, one), dtype: float64
In [27]: df['bar']['one']
Out[27]:
A 0.895717
B 0.410835
C -1.413681
Name: one, dtype: float64
In [28]: s['qux']
Out[28]:
one -1.039575
two 0.271860
dtype: float64