我正在寻找等同于DataFrame的MultiIndex的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]替代方案?
发布于 2020-05-04 15:26:42
如果我没理解错的话,我猜你可以把你的DataFrame子集。类似于:
df.loc['level'] # In case there is more than one level: df.loc[('level1': 'level2')]这将为您提供行(或多行),并从那里您可以再次垂直子集。同时在两个方向上设置子集将类似于:
df.loc['your_desired_column', 'level1': 'level2']如果您有多个索引,则基于外部索引和内部索引的sintax to子集是不同的。
Outser:使用字符串内部:使用元组
如下所示:
df.loc['level1':'level2'] # Outer
df.loc[('outer1', 'inner1'):('outer2', 'inner2')] # Outer & Inner我希望这对你有帮助!
发布于 2020-05-04 19:35:29
查看pandas提供的Basic indexing on axis with 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: float64https://stackoverflow.com/questions/61586927
复制相似问题