python - 按 MultiIndex 数据框中的特定索引级别过滤行

标签 python pandas multi-index

给定一个 multIndex 数据框:

mux = pd.MultiIndex.from_arrays([
    list('aaaabbbbbccdddddd'),
    list('tuvwlmnopxyfghijk')
], names=['one', 'two'])

df = pd.DataFrame({'col': np.arange(len(mux))}, mux)

df

         col
one two     
a   t      0
    u      1
    v      2
    w      3
b   l      4
    m      5
    n      6
    o      7
    p      8
c   x      9
    y     10
d   f     11
    g     12
    h     13
    i     14
    j     15
    k     16

是否可以保留数据框第 0 层的第 i 个值对应的行?

对于 i = 2,我的预期输出是:

         col
one two     
a   t      0
    u      1
    v      2
    w      3
b   l      4
    m      5
    n      6
    o      7
    p      8

请注意,仅保留与 a 和 b 相关的行,其他所有内容都将被删除。我希望问题很清楚,但如果没有,请随时要求澄清。

我试过:

idx = pd.IndexSlice
df.iloc[(idx[:2], slice(None))]

但这只给我整个 df 的前两行,而不是第 0 级前两个值的所有行。

最佳答案

解决此问题的一种方法是返回第 0 级的索引值,然后使用这些值索引到原始数据框中:

df.loc[df.index.levels[0][:2].values]

         col
one two     
a   t      0
    u      1
    v      2
    w      3
b   l      4
    m      5
    n      6
    o      7
    p      8

如评论中所述,这仅适用于第 0 级而不适用于第 1 级。可能存在适用于其他级别的更具通用性的解决方案。

关于python - 按 MultiIndex 数据框中的特定索引级别过滤行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46900483/

相关文章:

python - Pandas 与 MultiIndex 合并用于重复列

Python Pandas csv import "Error tokenizing data"- 显示错误行内容

python - 在字符串中的十六进制数字前附加 '0x'

Python 类型错误 : cannot do positional indexing on <class 'pandas.core.indexes.numeric.Int64Index' >

python - 根据列值使用 MultiIndex 对 pandas DataFrame 进行排序

python - Pandas 可以将 Excel 组结构读取为 Multiindex 吗?

Python - 替换 exec 来动态创建变量

python - 有没有办法在 python 中访问嵌套或重新引发的异常?

python - DataFrame 需要帮助来组织 DF 的列和行

python - 将具有未排序索引的多个 pandas 数据帧中的值插入到另一个数据帧中的现有列