python - 带有 MultiIndex : exclude level values 的 Pandas 数据框

标签 python pandas dataframe

我有一个多索引的 pandas 数据框,如下所示。

import numpy as np
import pandas as pd

arrays = [np.array(['bar', 'bar', 'bar', 'bar', 'foo', 'foo', 'qux', 'qux']),
          np.array(['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']),
          np.array(['blo', 'bla', 'bla', 'blo', 'blo', 'blu', 'blo', 'bla'])]

df = pd.DataFrame(np.random.randn(8, 4), index=arrays)

df.sort_index(inplace=True)

返回:

                    0         1         2         3
bar one bla  0.478461  1.030308  0.012688  0.137495
        blo  0.476041 -1.679848  1.346798  0.143225
    two bla  1.148882 -2.074197 -2.567959  1.258016
        blo  1.062280  3.846096 -0.346636  1.170822
foo one blo -0.761327  0.262105  0.151554  1.066616
    two blu  1.431951  0.043307 -0.326498  2.402536
qux one blo -0.622017 -0.566930  0.417977 -0.345238
    two bla  0.129273 -0.181396 -0.758381  0.995827

现在我想通过使用切片对象来选择一个子集:

idx = pd.IndexSlice
subset = df.loc[idx[['bar'], :, :], :]

返回:

                    0         1         2         3
bar one bla  0.478461  1.030308  0.012688  0.137495
        blo  0.476041 -1.679848  1.346798  0.143225
    two bla  1.148882 -2.074197 -2.567959  1.258016
        blo  1.062280  3.846096 -0.346636  1.170822

现在我想排除所有具有“blo”作为级别值的行。我知道我可以选择除“blo”值之外的所有内容,但我的真实数据框非常大,我只知道不应出现在子集中的级别值。

从子集中排除某些级别值的最简单方法是什么?

提前致谢!

最佳答案

IIUC,也许您可​​以使用以下方法屏蔽您的子集:

subset = subset.iloc[subset.index.get_level_values(2) != 'blo']

关于python - 带有 MultiIndex : exclude level values 的 Pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34788118/

相关文章:

c++ - 将 OpenGL 的 glRotated 转换为 Maya 的 cmds.rotate

python - 从一个 Dataframe 到另一个 Dataframe 查找元素并返回其索引的快速方法

python - 根据 pandas 列中的有序值从 DataFrame 中选择行

Python循环函数根据多列的Groupby创建新列

python - 如果 'W' 在 'X' 中,则将 'Y' 附加到 'Z'

python - 为什么再次导入模块没有更新模块?

Python按年+月拆分日期时间列表

python - mpi4py:未加载库:/usr/local/lib/libmpi.1.dylib

python - pandas 基于索引 vs ix 丢弃行

python - 根据列中的值删除行中的值,然后在 Pandas 中将单元格拆分为多行