pandas MultiIndex:获取特定级别和iloc的值



我正在为MultiIndex寻找DataFrameat的等价物。

我目前的实现使用:

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

最新更新